2012-09-27 48 views
1

我有一个Android应用程序和一个列表视图,当用户按下按钮时更新列表视图。该应用程序有两个操作栏选项卡。当我在标签之间切换时,旋转屏幕或者按回退出活动,列表视图中的所有数据都会消失。我需要数据保留。我知道,至少在方向更改时,我可以将数据保存在onSaveInstanceState()中。所以我在savedInstanceState中保存一个String [],并在onCreateView()中检索String []。这似乎工作正常,它正确读取数据。然后我尝试更新列表视图。这似乎也读取数据并正常工作,只有listview不会更新,而是保持空白。我对这个代码是:恢复ListView数据,ListView不显示数据

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(),仍然没有工作:

+0

可能重复的[如何刷新Android列表视图?](http://stackoverflow.com/questions/2250770/how-to-refresh-android-listview) – adatapost

回答

0

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

0

试试这个

adapter.notifyDataSetChanged(); 
+0

不幸的是,这似乎并不工作。它只是做同样的事情。 – NSchock

+0

它将工作,在向数组添加数据后使用此代码它将刷新listview.it为我工作。 –

+0

我在哪里放?我在检索数据后立即尝试,并尝试在saveInstanceState的if语句之外,但它仍然没有做任何事情。 – NSchock

0

保持的ListView数据在一些数据结构保存。
我觉得HashMaps最适合这个。
当您要填充时再次调用销售适配器。

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