アンドロイド:どのように私は私のarrayadapter /リストビューの変化の方向にデータを保存しますか?

StackOverflow https://stackoverflow.com/questions/2340838

質問

は、上記のように、それは自動的に行われますか?私のリストは、姿勢chMYanges一度空でしたか?といいえ、私は=の向きの変更が必要)

私のアダプタ

public class ResultsAdapter extends ArrayAdapter<SearchItem> implements Filterable{

private ArrayList<SearchItem> subItems;
private ArrayList<SearchItem> allItems;// = new ArrayList<SearchItem>();
private LayoutInflater inflater;
private PTypeFilter filter;
private OnCheckedChangeListener test;

public ResultsAdapter(Context context, int textViewResourceId, ArrayList<SearchItem> items,OnCheckedChangeListener a) {

    super(context, textViewResourceId, items);
        //this.subItems = items;
        for( int i = 0;i < items.size();i++){
            subItems.add(items.get(i));
        }
        this.allItems = this.subItems;
        inflater= LayoutInflater.from(context);

        test = a;
}

私のonCreate

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        



    ListView lvr = (ListView)findViewById(R.id.search_results);



  //  if(savedInstanceState == null){
        this.m_adapter = new ResultsAdapter(home.this, R.layout.listrow, sResultsArr,home.this);
        this.specsAdapter = new FeaturesExpandableAdapter(home.this,new ArrayList<String>(),new ArrayList<ArrayList<Feature>>()); 
   // }
        lvr.setAdapter(this.m_adapter);

みんなありがとう。

役に立ちましたか?

解決

また、 http://developer.androidを使用することができます。 COM /参照/アンドロイド/アプリ/ Activity.html#onRetainNonConfigurationInstance()

あなたの活動でこのような何かます:

@Override
public Object onRetainNonConfigurationInstance() {
    return this.m_adapter.getItems();
}

そして、あなたのonCreate()内:

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    // more init stuff here

    sResultsArr = (ArrayList<SearchItems>)getLastNonConfigurationInstance();
    if(sResultArr == null) {
        sResultsArray = new ArrayList<SearchItems>();  // or some other initialization
    }

    self.m_adapter = new ResultsAdapter(home.this, R.layout.listrow, sResultsArr,home.this);

    // ...
}

他のヒント

あなたはニーズが姿勢変更時に周りに固執することをメモリ内のデータを持っている場合は、

は、あなたがそれを手配するために何かをする必要があります。最善の解決策は、それが向きの変更のためだけでなく、使用されますので、onSaveInstanceState()を実装し、データを保存するためにそれを使用することですが、だけでなく、他の状況では(例えば、あなたの活動は、現在のスタックにあるが、それはRAMから追い出さを取得する必要があります)後のスタック内のもののためのスペースを解放する。

私はあなたが間違った方法にしていると思います。 Androidの開発者からこのビデオを見るためにいくつかの時間がかかるしてください: http://www.youtube.com/watch ?V = wDBM6wVEO70する(約1時間)。

私はビデオに続いて、画面が向きを変えるとき、私のリストビューには罰金を動作します: - )

私はOnSaveInstanceState()を使用してこの問題を解決し、OnRestoreInstanceState()

@Override
    protected void onRestoreInstanceState(Bundle state){
        super.onRestoreInstanceState(state);
        name_array.addAll(state.getStringArrayList("key"));
        setListAdapter(arrayAdapter);
        arrayAdapter.notifyDataSetChanged();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);
        outState.putStringArrayList("key",name_array);
    }

name_arrayArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);でホールドがある

今、あなたは肖像画に風景から変更し、逆とき、データがロス

ではありません
あなたが向きを変えたときに

のデータが失われてはなりません。私は想像することができる唯一のことはコントロールが向きを変えるときに目に見えるエリアの外に移動、のように、あなたの活動のためのレイアウトが正しくないということです。

あなたのAndroidManifest.xmlファイルにこのコードを入れてくださいます。

activity
        android:name="MainActivity"
        android:label="@string/app_name" 
        android:configChanges="keyboardHidden|orientation|screenSize"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top