这是我的情景:
我有一个MainActivity
和一个CustomListViewActivity
。在我的MainActivity中,我有1个按钮和1个微调器。单击该按钮,我将所选的微调器值通过Bundle
并使用Intents
传递给CustomListViewActivity。
现在,在我的CustomListViewActivity中,我有一个使用ArrayAdapter
填充它的ListView。我从MainActivity发送ArrayList
,例如
items = [abc]
在我的CustomListViewActivity中,我收到了相同的内容并使用它来填充我的ListView。我第一次这样做,我的价值被填充。第二次我这样做,现有的值现在被新的替换,ListView显示一个项而不是显示两个。
所以基本上问题是ListView没有更新,也没有显示这两个项目。相反,它总是向我显示一个项目。
以下是我的代码片段
MainActivity.java
//按钮内的代码点击 ..
{
items.add(spinner1.getSelectedItem().toString());
Bundle bundle =new Bundle();
bundle.putStringArrayList("data",items);
Intent i = new Intent(MainActivity.this,MyListViewActivity.class);
i.putExtras(bundle);
startActivity(i);
finish();
}
protected void onSaveInstanceState(Bundle icicle) {
super.onSaveInstanceState(icicle);
Log.i("App","onSave");
icicle.putStringArrayList("data",items);
}
@Override
protected void onRestoreInstanceState(Bundle icicle2) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(icicle2);
Log.i("App","onRestore");
icicle2.putStringArrayList("data",items);
}
MyListViewActivity.java
private ArrayList<String> myItems;
private static String[] titles;
CustomListViewAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_main);
listView = (ListView) findViewById(R.id.list1);
rowItems = new ArrayList<RowItem>();
adapter = new CustomListViewAdapter(this,R.layout.list_item, rowItems);
listView.setAdapter(adapter);
b=getIntent().getExtras();
if(b!=null)
{
myItems=b.getStringArrayList("data");
titles= new String[myItems.size()];
titles = myItems.toArray(myItems);
}
...
int i=0;
while(i<titles.length) {
item = new RowItem(titles[i]);
//rowItems.add(item);
Log.i("ROW", ""+rowItems.size());
i++;
adapter.add(item);
listView.setAdapter(adapter);
}
adapter.setNotifyOnChange(true);
adapter.notifyDataSetChanged();
}
}
如何使ListView维护当前数据以及反映添加的数据?
提前致谢
编辑:忘了提一件事。在我的MyListViewActivity
课程中,我在ListView上方有一个按钮,点击该按钮会将我带到MainActivity
,以便我可以再次添加新的Item
。因此,当我回到MainActivity并尝试添加一个新项目时,它是显示的新项目,而不是显示前一个和新项目
答案 0 :(得分:2)
您需要在MainActivity的items
和onSaveInstanceState
方法中保留并恢复onRestoreInstanceState
列表。
每次启动ListView活动时,您也可能不需要通过调用finish()来关闭MainActivity,但这取决于您的应用程序。
基本上,您遇到的问题是每次使用MainActivity的新实例都会重新创建items
。由于您完成了MainActivity,每次访问该活动时都会使用一个新实例(我假设您认为项目只是不断添加项目)。