我在这篇文章中提出了我的问题Updating ExpandableListView with notifyDataSetChanged()
“每次使用setNotifyDatasetChanged刷新视图时,适配器都会调用List周围的循环。并且由于您所做的更改,适配器中的List会获得一个空值。”
我是初学者,无法正确更改列表
我的消息来源
public class UrlArrayAdapter extends ArrayAdapter<UrlItem> {
private LayoutInflater inflater;
private ListView urlListView1;
private ArrayList<UrlItem> urlItems1;
public UrlArrayAdapter(Context context, ListView urlListView,
ArrayList<UrlItem> urlLists) {
super(context, urlListView.getId(), urlLists);
this.urlItems1 = urlLists;
this.urlListView1 = urlListView;
inflater = LayoutInflater.from(context);
如何从基本适配器的urlLists中的列表中删除项目?
答案 0 :(得分:0)
删除项目:urlList.remove(item_index);
然后通知数据集已更改。
根据您的评论,我正在更新我的答案。
remove()
方法接受要删除的元素的索引,而不是元素本身。
因此,要从列表中删除特定数字,首先应找到其索引,然后将该索引传递给remove()
方法。
例如:
public void deleteItem(int numberToDelete) {
int index=-1;
// Find the index of numberToDelete
if(urlLists.contains(numberToDelete)){
index = urlLists.indexOf(numberToDelete);
}
// Delete the number by spefying the index found.
if(index!=-1){
urlLists.remove(index);
}
//...
}
答案 1 :(得分:0)
除了覆盖public View getView(int position, View view, ViewGroup parent)
之外,请确保扩展ArrayAdapter
的类会覆盖这些方法:
public int getCount()
public UrlItem getItem(int position)
public int getPosition(Hold item)
public long getItemId(int position)
我相信notifyDataSetChanged()
会调用适配器上的getCount()
来确定有多少项。如果您不使用return urlItems1.size();
覆盖此方法,那么IndexOutOfBoundException
似乎迫在眉睫,因为您的自定义适配器无法告诉客户其大小和内容。