安卓:我如何保存数据在我arrayadapter /列表视图时改变方向?
-
22-09-2019 - |
题
如上述,它是自动完成?我的列表是空的,一旦方向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_array
是保持在ArrayAdapter 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"
不隶属于 StackOverflow