2015-04-05 111 views
2

我想动态地在ListView中添加项目。

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

这是我的代码:

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(); 
     } 
    } 

我对这个说法得到一个例外:

lv.setAdapter((customAdapter)); 

我的例外是:

java.lang.IllegalStateException: Observer [email protected] was not registered. 

以下是完整的日志:

22/com.example.admin.chatsdk W/System.err﹕ java.lang.IllegalStateException: Observer [email protected] 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) 

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

回答

0

我创建一个for loopCustomAdapterM对象,你可以在我的问题是错误看到。

的措施来解决这个问题:在onCreate梅索德我创建adapter object并设置adapterlistview

1)。

CustomAdapterM customAdapter = new CustomAdapterM(getApplicationContext(), android.R.layout.simple_list_item_1, list); 
lv.setAdapter((customAdapter)); 

2),并调用notifyDataSetChanged()功能增加新的项目到列表后:

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

Expain你的答案是什么。你做了什么? – 2016-03-10 20:37:06

+1

对不起,当我提出这个问题时,我是新的。我编辑了我的答案。请检查。 – 2016-03-11 05:59:14

+0

太棒了!现在它是有帮助的。谢谢。 – 2016-03-11 14:04:46

1

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

 CustomAdapterM customAdapter = new CustomAdapterM(getApplicationContext(), android.R.layout.simple_list_item_1, list); 
    lv.setAdapter((customAdapter));