1

我有一个带有列表视图的 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);
   }
4

3 回答 3

0

试试这个

adapter.notifyDataSetChanged();
于 2012-09-27T03:48:38.783 回答
0

将列表视图数据保存在某些数据结构中。
我觉得HashMaps最适合这个。
当您想要填充时,再次调用销售适配器。

adapter=new MyAdapter(dataHashMap);
listView.setAdapter(adapter);
于 2012-09-27T04:22:32.467 回答
0

找到了解决方案。由于某种原因,在 onCreateView() 方法中恢复它们时,它无法正确显示这些值。我改为在片段的 onCreate() 方法中恢复它们。除了将 saveInstanceState 检查移至 onCreate() 方法之外,我并没有真正改变太多,但现在它可以工作了。

于 2012-09-29T22:55:59.397 回答