IndexOutOfBoundException当我使用notifyDataSetChanged(I

2019-09-21 07:20发布

我在这个岗位成立我的问题更新ExpandableListView与notifyDataSetChanged()

“每次刷新使用setNotifyDatasetChanged适配器将随时待命,列表循环的意见。你在适配器列表获得一个空值,由于你所做的更改。”

我是初学者,无法正常进行更改列表

我的消息来源

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列表中删除一个项目?

Answer 1:

除了覆盖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似乎迫在眉睫,因为将有没有办法让你自定义适配器来讲述它的大小和内容的客户端。



Answer 2:

要删除项目: 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);
    }

//...
}


文章来源: IndexOutOfBoundException when I use notifyDataSetChanged