如上所述,是自动完成的吗?一旦定位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);
谢谢你们
答案 0 :(得分: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);
// ...
}
答案 1 :(得分:5)
如果内存中的数据需要在方向更改期间保留,则需要做一些事情来安排。最好的解决方案是实现onSaveInstanceState()
并使用它来存储您的数据,因为它不仅用于方向更改,还用于其他情况(例如,您的活动在当前堆栈上,但它需要获取从RAM中踢出来为堆栈中的东西腾出空间。)
答案 2 :(得分:1)
我认为你走错了路。请花点时间观看Android开发者的视频:http://www.youtube.com/watch?v=wDBM6wVEO70(约1小时)。
我关注了视频,当屏幕更改方向时,我的列表视图正常工作: - )
答案 3 :(得分: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);
现在,当您从横向更改为纵向和反转时,数据不会丢失
答案 4 :(得分:-1)
更改方向时,不应丢失数据。我唯一可以想象的是你的活动布局不正确,比如,控件在改变方向时移出可见区域。
答案 5 :(得分:-5)
请将此代码放在AndroidManifest.xml
文件中。
activity
android:name="MainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"