6

我發現很多關於同一主題的問題,但我無法弄清楚我在這裏做錯了什麼,如何解決「適配器的內容已經改變,但ListView沒有收到通知」異常

異常: 「適配器的內容已更改,但ListView未收到通知。確保您的適配器的內容不是從後臺線程修改,但只能從UI線程」

我有一個TextWatcher我AutoCompleteTextView。我想,當文本的變化。我獲取更新的下拉列表用於下拉從兩個不同的源,而且不同的線程中運行它們中的每一個數據。

mTextWatcher = new TextWatcher() { 
     public void afterTextChanged(Editable editable) {   
     } 

     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
     } 

     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      suggestionNewText = s.toString(); 
      list = new ArrayList<Map<String, String>>(); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        //data processing 
        list.add(data); 
        handler.sendEmptyMessage(1); 
          } 
         }); 

      Thread webAutoComplete = new Thread(new Runnable() { 
         @Override 
         public void run() { 
           //data process 
           list.add(data); 
           handler.sendEmptyMessage(1); 
      } 
      }); 

      try { 
        webAutoComplete.start(); 
       } catch (NullPointerException e) { 
       } catch (IllegalStateException e) { 
      }      
     } 
    }; 

並且用於適配器的處理程序是旁邊textwatcher。

handler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
      case 1: { 

       ((Activity) CONTEXT).runOnUiThread(new Runnable() { 
        public void run() { 
         try { 
          if (list != null) 

          suggestionAdapter = new UrlSuggestionAdapter(
            CONTEXT, 
            list, 
            R.layout.two_line_autocomplete, 
            new String[] { "title", "url" }, 
            new int[] { R.id.title, R.id.url 
              }); 
          if (list != null) { 
           refreshAdapter(list); 
           getUrl.setAdapter(suggestionAdapter); 

          } 

         } catch (Exception e) { 

         } 
        } 
       }); 
       break; 
      } 
      case 2: { 
       break; 
      } 
      } 
     } 
    }; 



public synchronized void refreshAdapter(List<Map<String, String>> items) { 

    list = items; 
    if (list != null) { 

     suggestionAdapter.notifyDataSetChanged(); 
    } 
} 

整個代碼以上是在Activity的O中nCreate()方法。我總是沒有例外。它發生在特定的場合。此問題尚未解決。在創建適配器後,我添加了notifydatasetchanged()方法。仍然不能解決問題。任何人都可以指出我在這裏做錯了嗎?

+0

每次創建一個新的suggestionAdapter後,檢查suggestionAdapter是否爲空值是什麼?我並不是那種低估了這一點的人,但是如果沒有適當的支架,你的代碼格式可能很難閱讀。 – Neoh

+0

更新的問題 – intrepidkarthi

+1

嘗試在創建新適配器後調用suggestionAdapter.notifyDataSetChanged() – Neoh

回答

3

通過每當列表,而不是改變插入的n個後調用它的加入

suggestionAdapter.notifyDataSetChanged(); 

修正了錯誤。

相關問題