2015-04-05 35 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));