我有一个在onCreate()中填充的listView,因为在屏幕旋转中再次调用onCreate(),它再次填充它,因此在每次旋转后我得到的条目当然添加了我不想要的内容。 onCreate基本上是:
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
myList = new ArrayList<SingleEntry>();
new getList().execute(); //Async task to fill myList
ListView lv = (ListView) getActivity().findViewById(R.id.ListView01);
itemAdapter = new ItemAdapterOverview(getActivity().getApplicationContext(), myList);
lv.setAdapter(itemAdapter);
}
其中myList是ArrayList和类变量。我在onCreate()尝试填充之前设置了一个null适配器,这就是Google向我建议的。但它没有用。
答案 0 :(得分:2)
在清单上为列表活动添加此内容:
android:configChanges="orientation|keyboardHidden|screenSize"
并覆盖您活动的OnConfigurationChanged方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
}
这不应该再打电话给你的onCreate了。
答案 1 :(得分:1)
简单的“快速修复”答案: 在onCreate()上的itemAdapter上调用.clear(),你也可以尝试在列表适配器上调用.notifyDataSetChanged()。
在再次添加之前,这将清除适配器中的项目。
不太简单但更完整的答案: 另一种方法是在onCreate()中传递bundle内的itemAdapter,参见http://developer.android.com/guide/topics/resources/runtime-changes.html中标题为“在配置更改期间保留对象”的部分
答案 2 :(得分:1)
您可以将myList
保存在Android方法onSaveInstanceState
中,如下所示:
protected void onSaveInstanceState(Bundle bundle) {
bundle.putSerializable("myList", myList);
super.onSaveInstanceState(bundle);
}
请确保通过SingleEntry
实现Serializable interface来创建课程Serializable
SingleEntry
(注意:如果{{1}内部有任何复杂的数据结构你应该让它们实现SingleEntry
接口。然后在Serializable
中,您可以使用以下内容:
onCreate