ListView通胀/保存

时间:2013-12-02 20:23:55

标签: android listview gridview

我有一个ImageButtons的GridView,用户可以在其中选择要添加到ListView的元素,即下面的View。用户需要从GridView中进行多项选择。这意味着他们必须在两个视图之间来回导航,将他们的选择添加到ListView。我需要知道如何使用已经选择的元素和新选项重新充气ListView。基本上,我正在努力如何保留列表内容,然后在进行另一个选择时膨胀内容。我一直在尝试使用ArrayAdapter,但我没有成功。

1 个答案:

答案 0 :(得分:0)

在使用ListView时,忽略了使用notifyDataSetChanged()的必要性。下面是如何填充和刷新ListView的基本概述。

为元素列表创建一个ArrayList,一个ListView用于显示它们,以及一个ArrayAdapter来连接它们:

private ArrayList<String> mMyElements;
private ListView mMyListView;
private ArrayAdapter<String> mMyArrayAdapter;  

设置ListView:

mMyListView = (ListView)findViewById(R.id.myListView);
mMyListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);  // There are other ChoiceModes available,
                                                           // but I'm guessing this is the most likely one you want for your situation.

设置ArrayAddapter并将其分配给ListView:

mMyArrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_activated_1, mMyElements);
mMyListView.setAdapter(mMyArrayAdapter);

现在,您可以通过更改ArrayList中包含的内容来更改ListView中显示的内容。使用notifyDataSetChanged()向ArrayAdapter发出信号,告知它需要更新ListView的显示:

...
// Code which changes the elements contained in the ArrayList
// For example..
myElements.add(x);
myElements.remove(y);
...
// Notify the ArrayAdapter that it's ArrayList has changed.
mMyArrayAdapter.notifyDataSetChanged(); // This line is vital to get the altered ArrayList to display.
mMyListView.clearChoices();  // You may want to clear any old selections from the ListView when you refresh the display.

<强> <Additional> 如果通过“重新膨胀”意味着您的GridView和ListView位于不同的Activites或Fragments中,那么您需要做的就是在它们之间导航时维护ArrayList myElements。您可以在intent中传递ArrayList。