【问题标题】:ListView Inflation/PreservationListView 膨胀/保留
【发布时间】:2013-12-02 20:23:54
【问题描述】:

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

【问题讨论】:

    标签: android listview gridview


    【解决方案1】:

    在掌握 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.
    

    &lt;Additional&gt; 如果“重新膨胀”是指您的 GridView 和 ListView 位于不同的 Activity 或 Fragment 中,那么您需要做的就是在它们之间导航时维护 ArrayList myElements。您可以按意图在它们之间传递 ArrayList。

    【讨论】:

    • 谢谢!是的,通过重新膨胀,我的意思是它们位于不同的片段中,并且在每个新实例中我都会丢失列表内容。
    • 那么使用意图在片段之间传递列表是否解决了您的问题?如果是这样,请不要忘记将答案标记为已接受。
    • 是的,我很高兴能够继续使用我忘记的应用程序。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多