我有一个带有列表视图的 Android 应用程序,当用户按下按钮时,它会更新列表视图。该应用程序有两个操作栏选项卡。当我在选项卡之间切换、旋转屏幕或按返回退出活动时,列表视图中的所有数据都会消失。我需要保留数据。我知道至少通过方向更改,我可以将数据保存在 onSaveInstanceState() 中。所以我在savedInstanceState 中保存了一个String[],并在onCreateView() 中检索了String[]。这似乎工作正常,它正确读取数据。然后我尝试更新列表视图。这似乎也可以读取数据并正常工作,只有列表视图没有更新,而是保持空白。我的代码是:
if (savedInstanceState != null) {
lvArray = savedInstanceState.getStringArray("lvArray");
setupListView();
} else {
lvArray= new String[LISTVIEW_LIMIT];
for (int i = 0; i < LISTVIEW_LIMIT; i++) {
lvArray[i] = " ";
}
setupListView();
}
private void setupListView() {
if (listview.getAdapter() == null) {
ArrayAdapter<String> listviewAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, lvArray);
listview.setAdapter(listviewAdapter);
}
registerForContextMenu(listview);
}
所以正如我所说,我通过这个,它正确读取数据,设置数据的 ArrayAdapter,并为列表视图设置适配器。这一切似乎都有效,只是它实际上并没有更新它。我知道所有数据都在那里,但它仍然无法正常工作?
此外,我可以将列表视图设置为不同的大小(通过 LISTVIEW_LIMIT)。这很好用,除了它还会删除列表视图中已经存在的所有数据。当限制发生变化时,如何保留数据而不是重新创建数组?
将其保存在 onPause() 或 onStop() 中的最佳方法是什么,以便即使按下返回或切换选项卡,我也可以保持列表视图处于打开状态?
编辑:更改为使用 notifyDataSetChanged(),仍然无法正常工作:
lvStopwatch = (ListView) view.findViewById(R.id.list_stopwatch);
stopwatchTimes = new String[TOTAL_TIMES];
for (int i = 0; i < TOTAL_TIMES; i++) {
stopwatchTimes[i] = " ";
}
setupListView();
if (savedInstanceState != null) {
stopwatchRunning = savedInstanceState.getBoolean("stopwatchRunning", false);
stopwatchTimes = savedInstanceState.getStringArray("stopwatchTimes");
stopwatchAdapter.notifyDataSetChanged();
} else {
stopwatchRunning = prefs.getBoolean("stopwatchRunning", false);
Log.d("savedPASS", String.valueOf(stopwatchRunning));
}
private void setupListView() {
if (lvStopwatch.getAdapter() == null) {
stopwatchAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, stopwatchTimes);
lvStopwatch.setAdapter(stopwatchAdapter);
}
registerForContextMenu(lvStopwatch);
}