3

上記のように、それは自動的に行われますか?オリエンテーション 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);

みんなありがとう

4

6 に答える 6

20

http://developer.android.com/reference/android/app/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);

    // ...
}
于 2010-02-26T15:00:02.047 に答える
5

向きの変更中に保持する必要があるデータがメモリ内にある場合は、それを調整するために何かをする必要があります。最善の解決策は、それを実装onSaveInstanceState()してデータを保存するために使用することです。これは、向きの変更だけでなく、他の状況でも使用されるためです (たとえば、アクティビティは現在のスタック上にありますが、RAM から追い出す必要があります)。スタックの後半にあるもののためにスペースを解放します)。

于 2010-02-26T12:18:24.130 に答える
1

あなたは間違った道を進んでいると思います。Android の開発者による次のビデオをご覧ください: http://www.youtube.com/watch?v=wDBM6wVEO70 (約 1 時間)。

ビデオをフォローしましたが、画面の向きが変わってもリストビューは正常に機能します:-)

于 2012-01-09T15:46:45.350 に答える
0

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_array保留中ですArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);

横向きから縦向き、逆向きに変更しても、データが失われることはありません

于 2016-04-20T16:04:47.250 に答える
-1

方向を変更してもデータが失われることはありません。私が想像できる唯一のことは、方向を変更するとコントロールが表示領域から移動するなど、アクティビティのレイアウトが正しくないことです。

于 2010-02-26T10:50:06.447 に答える
-5

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

activity
        android:name="MainActivity"
        android:label="@string/app_name" 
        android:configChanges="keyboardHidden|orientation|screenSize"
于 2013-08-20T09:11:44.350 に答える