恢复ListView数据,ListView不显示数据

时间:2012-09-27 03:40:28

标签: android listview android-arrayadapter

我有一个带有listview的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设置适配器。这一切似乎都有效,只是它实际上没有更新它。我知道那里的所有数据,但它仍然无法正常工作?

此外,我可以将listview设置为不同的大小(通过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);
   }

3 个答案:

答案 0 :(得分:0)

试试这个

adapter.notifyDataSetChanged();

答案 1 :(得分:0)

将listview数据保存在某些数据结构中 我发现HashMaps最适合这个 如果要填充,请再次致电销售适配器。

adapter=new MyAdapter(dataHashMap);
listView.setAdapter(adapter);

答案 2 :(得分:0)

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