从另一个适配器更新适配器数据集

时间:2015-03-15 00:48:29

标签: android

我在SeperatedListAdapter中有一些适配器。当我尝试修改适配器的数据时,我遇到IllegalStateException。信息如下:

  

适配器的内容已更改,但ListView未收到   通知。确保未修改适配器的内容   来自后台线程,但仅来自UI线程。确保你的   适配器在其内容更改时调用notifyDataSetChanged()。 [在   带适配器的ListView(16908298,类android.widget.ListView)(类   com.mytest.ListTest.Adapter.SeparatedListAdapter)]

我的印象是notifyDataSetChanged方法仅适用于更改了数据集的适配器,因此我不确定异常引用SeperatedListAdapter的原因。以下是我目前的代码:

ListFragment:

public class FragmentOne extends ListFragment {
    @Override
    public void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        SeparatedListAdapter sepList = new SeparatedListAdapter(getActivity());
        sepList.addSection("List One", new CustomAdapter(getActivity()));
        setListAdapter(sepList);
    }   
}

CustomAdapter:

public class CustomAdapter extends BaseAdapter {

    private final List<String> data;

    public CustomControllerAdapter(Context context) {
        this.context = context;
        data = new ArrayList<String>(((MainActivity) context).getList());
    }       

    public void removeFromList(String name) {
        data.remove(name);
        notifyDataSetChanged();
    }

    public void addToList(String name) {
        data.add(name);
        notifyDataSetChanged();
    }       
}

有人可以解释我错过了什么吗?

编辑:经过一些测试,我发现如果我暂停并恢复活动,列表确实会更新。但是,我仍然不确定在活动运行时我必须做些什么来更新它。

1 个答案:

答案 0 :(得分:0)

我终于找到了问题所在。在我的情况下,我想在我的适配器中添加一个额外的TextView而不将其添加到列表中,因此我将所需的金额添加到现有列表计数中。调用notifyDataSetChanged时,将从列表中删除项指定项,但计数大小会导致类型转换异常。我已经删除了这一切,一切都按预期工作。