6

Ho trovato un sacco di domande sullo stesso argomento, ma non sono in grado di capire cosa sto facendo male quiCome risolvere "Il contenuto dell'adattatore è cambiato ma ListView non ha ricevuto notifica" eccezione

Eccezione: "Il contenuto dell'adattatore è cambiato ma ListView non ha ricevuto una notifica. Assicurati che il contenuto dell'adattatore non venga modificato da un thread in background, ma solo dal thread dell'interfaccia utente "

Ho un TextWatcher sul mio AutoCompleteTextView. Sto cercando di aggiornare l'elenco a discesa quando il testo cambia. dati per la discesa da due fonti diverse. E ognuno di loro esecuzione all'interno fili diversi.

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

E gestore per l'adattatore è vicino al 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(); 
    } 
} 

l'intero codice sopra è all'interno di Attività O metodo nCreate(). Non ottengo sempre l'eccezione. Succede in occasione specifica. Questo problema non è stato ancora risolto. Ho aggiunto il metodo notifydatasetchanged() dopo la creazione della scheda. Ancora questo non risolve il problema. Qualcuno può far notare cosa sto facendo male qui?

+0

qual è il punto di verifica se suggerimentoAdapter è nullo dopo aver creato un nuovo suggerimentoAdapter ogni volta? Non sono io che lo sottovaluta, ma il formato dei tuoi codici può essere difficile da leggere senza parentesi. – Neoh

+0

Domanda aggiornata – intrepidkarthi

+1

Prova a chiamare suggestionAdapter.notifyDataSetChanged() dopo aver creato il nuovo adattatore – Neoh

risposta

3

corretto l'errore aggiungendo

suggestionAdapter.notifyDataSetChanged(); 

ogni volta che la lista è cambiato invece di chiamarla dopo un numero n di inserzioni.

Problemi correlati