【问题标题】:ArrayAdapter : Remove by IndexArrayAdapter:按索引删除
【发布时间】:2011-08-06 04:27:42
【问题描述】:

我有一个由新闻服务器概要(只是故事片段列表)填充的 ListView 和一个用于修改该 ListView 的 arrayAdapter。

我可以通过“remove(Object)”函数删除项目,但是如果有多个“Object”实例怎么办? remove() 仅删除了“对象”的第一个实例。例如,如果不删除第一个,我无法删除数组适配器中的第二个“对象”。所以我的问题是我该如何解决这个问题?

ex : 破败 A

story 1 
story 2
Break
story 3
story 4
Break
story 5
etc...

所以在本例中,我无法删除第二个“Break”,因为 remove('Break') 将删除第一个。如果我可以 removeByIndex(5),那将是完美的,但是....

我尝试编写自己的删除函数,该函数创建一个全新的适配器,其中包含除指定索引之外的所有成员。这就是我在搞砸的东西。

public ArrayAdapter<String> removeIndex(ArrayAdapter<String> arr, int index) {
    ArrayAdapter<String> temp = new ArrayAdapter<String>(arr.getContext(),R.layout.list_item);
    for(int i =0 ; i<arr.getCount();i++){
        if(i != index) temp.add(arr.getItem(i));
    }
    return temp;
}

请提供帮助或建议。

【问题讨论】:

    标签: java android listview android-arrayadapter


    【解决方案1】:

    使用 List 自己处理字符串集合,并将对象传递给 ArrayAdapter 的构造函数。这为您留下了对列表的引用,以便您可以更改数据,同时允许适配器根据需要进行管理和显示。

    注意:修改数据对象时必须调用

    myAdapter.notifyDataSetChanged()
    

    之后 - 它也必须在 UI 线程上。显然,列表的更改不必发生在 UI 线程上,并且很可能发生在 UI 线程上。

    private ArrayList<String> mData = new ArrayList<String>();
    private ArrayAdapter<String> mAdapter;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // ...
        // Code that adds the strings
        // Create the list adapter
        mAdapter = new ArrayAdapter<String>(myActivity.this, android.R.layout.simple_list_item_1, mData);
    }
    
    private void removeItem(int index) {
        mData.removeAt(index);
        myActivity.this.runOnUiThread(new Runnable() {
            public void run() {
                mAdapter.notifyDataSetChanged();
            }
        }
    }
    

    【讨论】:

    • 如果我错了,请纠正我。通过这样做(以及我现在这样做的方式),我每次删除一个对象时都必须创建一个新的适配器,因此必须调用 setListAdapter(),它会丢失我在 ListView 中的滚动位置。
    • 漂亮!这样一个简单而优雅的解决方案。谢谢。
    • developer.android.com/reference/android/widget/… 应该意味着您不必手动调用notifyDataSetChanged()
    • 这不是线程安全的。在极少数情况下,当另一个线程正在更新列表时,UI 线程尝试访问列表(例如,由于用户的滚动),您的应用可能会崩溃。使用线程安全列表:developer.android.com/reference/java/util/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2018-11-04
    • 2021-08-14
    • 1970-01-01
    • 2019-01-16
    • 2017-09-11
    • 2017-06-22
    相关资源
    最近更新 更多