我有一个由新闻服务器纲要填充的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;
}
帮助或建议得到满足。
答案 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();
}
}
}