【发布时间】:2014-07-07 07:31:46
【问题描述】:
我有一个带有多选列表的片段。我正在尝试保存当前在列表中检查的项目的实例,并在应用程序最小化等情况下恢复它们。
测试步骤:
- 到达多选列表片段。
- 检查一些列表项
- 按主页键最小化应用程序。
- 按下多任务按钮并选择我的应用来恢复它
以下是我正在使用的代码:
adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_multiple_choice,
android.R.id.text1, listToShow);
list.setAdapter(adapter);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
mSelectedItems.clear();
int count = categoryList.getCheckedItemCount();
SparseBooleanArray booleanArray = categoryList.getCheckedItemPositions();
for (int i = 0; i < count; i++) {
mSelectedItems.add(booleanArray.keyAt(i));
}
}
});
@Override
public void onSaveInstanceState(Bundle outState) {
Log.d("SubcategoryselectionList", "onsavedinstancestate");
outState.putIntegerArrayList(SELECTED_ITEM, mSelectedItems);
super.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
Log.d("SubcategoryselectionList", "onViewStateRestored");
if (savedInstanceState != null) {
if (savedInstanceState.getIntegerArrayList(SELECTED_ITEM) != null) {
Log.d("SubcategoryselectionList", "onViewStateREstored selected items found");
mSelectedItems = savedInstanceState
.getIntegerArrayList(SELECTED_ITEM);
for (int i = 0; i < mSelectedItems.size(); i++) {
categoryList.setItemChecked(mSelectedItems.get(i), true);
}
}
}
super.onViewStateRestored(savedInstanceState);
}
当我看到日志时,永远不会调用方法 onViewStateRestored。
为了解决这个问题,我想到了使用活动生命周期并使用其方法onRestoreInstanceState() 来实现上述效果,但令人惊讶的是我看不到我添加到此方法的日志。
请有人帮助澄清在这种情况下 Activity 和 Fragment 的生命周期如何工作,以及如何以最佳方式恢复我的状态。
【问题讨论】:
标签: android android-activity android-fragments android-lifecycle