首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android.widget.AbsListView$AdapterDataSetObserver :观察员java.lang.IllegalStateException未注册

android.widget.AbsListView$AdapterDataSetObserver :观察员java.lang.IllegalStateException未注册
EN

Stack Overflow用户
提问于 2015-04-05 16:16:57
回答 2查看 6.1K关注 0票数 2

我正在尝试在ListView中动态添加项。

它每5秒检查一次新条目,并将其设置为list视图。

这是我的密码:

代码语言:javascript
复制
public void T2TCheck(){
        try {
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    List<MessageDB> messageDBList = MessageDB.find(MessageDB.class, "read = 0");
                    while (true) {
                        if (StaticMember.IS_ACTIVE) {
                            try {
                                for (int i = 0; i < messageDBList.size(); i++) {
                                    list.add(new com.example.admin.chatsdk.Message("", messageDBList.get(i).getMessage(), "", messageDBList.get(i).getSent() + ""));
                                    CustomAdapterM customAdapter = new CustomAdapterM(getApplicationContext(), android.R.layout.simple_list_item_1, list);
                                    lv.setAdapter((customAdapter));
                                }

                            } catch (Exception e) { e.printStackTrace();}
                        }
                        try {
                            Thread.sleep(5000);
                        } catch (Exception e) { e.printStackTrace();}
                    }
                }
            };
            Thread thread = new Thread(runnable);
            thread.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我在这个声明中得到了一个例外:

代码语言:javascript
复制
lv.setAdapter((customAdapter));

我的例外是:

代码语言:javascript
复制
java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver@21dbdb80 was not registered.

以下是完整的日志:

代码语言:javascript
复制
22/com.example.admin.chatsdk W/System.err﹕ java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver@21dbdb80 was not registered.
04-05 21:32:19.657     507-1222/com.example.admin.chatsdk W/System.err﹕ at android.database.Observable.unregisterObserver(Observable.java:69)
04-05 21:32:19.657     507-1222/com.example.admin.chatsdk W/System.err﹕ at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
04-05 21:32:19.657     507-1222/com.example.admin.chatsdk W/System.err﹕ at android.widget.ListView.setAdapter(ListView.java:459)
04-05 21:32:19.657     507-1222/com.example.admin.chatsdk W/System.err﹕ at com.example.admin.chatsdk.Messages$2.run(Messages.java:152)
04-05 21:32:19.657     507-1222/com.example.admin.chatsdk W/System.err﹕ at java.lang.Thread.run(Thread.java:841)

请指导我解决这个问题。提前鸣谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-06 12:59:04

正如您在我的问题中看到的那样,我在一个CustomAdapterM for loop 中创建了对象,这是错误的。

解决这一问题的步骤:

1)在onCreate方法中,我创建了adapter object并将adapter设置为listview

代码语言:javascript
复制
CustomAdapterM customAdapter = new CustomAdapterM(getApplicationContext(), android.R.layout.simple_list_item_1, list);
lv.setAdapter((customAdapter));

2)并在向列表中添加新项后调用notifyDataSetChanged()函数:

代码语言:javascript
复制
for (int i = 0; i < messageDBList.size(); i++) {
    list.add(new com.example.admin.chatsdk.Message("", messageDBList.get(i).getMessage(), "", messageDBList.get(i).getSent() + ""));
}
customAdapter.notifyDataSetChanged();
票数 0
EN

Stack Overflow用户

发布于 2015-04-05 16:22:22

下面的代码不应该在循环的外部吗?:

代码语言:javascript
复制
     CustomAdapterM customAdapter = new  CustomAdapterM(getApplicationContext(), android.R.layout.simple_list_item_1, list);
     lv.setAdapter((customAdapter));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29459390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档