ArrayAdapter:按索引删除

时间:2011-08-06 04:27:42

标签: java android listview android-arrayadapter

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

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

ex:Rundown A

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

所以在这个例子中我不能删除第二个'Break',因为remove('Break')将删除第一个'Break'。如果我可以删除ByIndex(5),那将是完美的但是......

我已经尝试编写自己的remove函数,它创建了一个包含指定索引的所有成员的全新适配器。这就是我在搞乱的地方。

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;
}

帮助或建议得到满足。

1 个答案:

答案 0 :(得分:3)

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

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

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();
        }
    }
}