android:如何在更改方向时保留arrayadapter/listview中的数据?

joe*_*ejy 3 android listview orientation listadapter

如上所述,是自动完成的吗?一旦定位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;
}
Run Code Online (Sandbox Code Playgroud)

我的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);
Run Code Online (Sandbox Code Playgroud)

多谢你们

syn*_*nic 20

您也可以使用http://developer.android.com/reference/android/app/Activity.html#onRetainNonConfigurationInstance()

您的活动中有类似的内容:

@Override
public Object onRetainNonConfigurationInstance() {
    return this.m_adapter.getItems();
}
Run Code Online (Sandbox Code Playgroud)

然后在你的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);

    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • `ArrayAdapter`及其父类都没有`getItems`方法.我在这里错过了什么? (8认同)
  • 然后是什么新方法? (4认同)
  • 请注意,在最近的Android版本(至少4.0)上,我们强烈建议不要这样做. (2认同)

Com*_*are 5

如果内存中的数据需要在方向更改期间保留,则需要做一些事情来安排.最好的解决方案是实现onSaveInstanceState()并使用它来存储您的数据,因为它不仅用于方向更改,还用于其他情况(例如,您的活动在当前堆栈上,但它需要从RAM中被踢出为堆栈中的东西腾出空间).

  • 通过`onSaveInstanceState()`,你不能,因为你的进程可能被破坏(参见我的回答中的例子).您可以使用`onRetainNonConfigurationInstance()`在方向更改期间保留任意对象,但请记住,这几乎*仅*处理方向更改,而不是您的活动从RAM中逐出的情况. (4认同)