Aggiornamento della visualizzazione di elenco quando i dati dell'adattatore cambiano

Quando i dati associati alla scheda di arrays vengono modificati, invalidare la listview è sufficiente per visualizzare i valori aggiornati? A seguito di codice non funziona, ho frainteso qualcosa qui.

public class ZeroItemListActivity extends Activity { private ArrayList<String> listItems=new ArrayList<String>(); private ListView mMyListView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mMyListView=(ListView) findViewById(R.id.MyListView); mMyListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,listItems)); } public void addItem(View v){ listItems.add("list Item"); mMyListView.invalidate(); } } 

Layout usato:

  • La cartella disegnata a densità o il draw-nodpi avrà la precedenza?
  • Come ottengo l'altezza e la width della barra di navigazione Android programmaticamente?
  • Il modo migliore per gestire il ProgressDialog da AsyncTask
  • "Si è verificato un errore" durante l'authentication con Facebook s android sdk
  • Gradel Build si blocca alle attività di esecuzione:
  • Come faccio a ridurre l'imbottitura interna del text all'interno di un object button Android?
  •  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/MyListView"></ListView> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/AddItemsButton" android:text="Add Items" android:onClick="addItem"></Button> </LinearLayout> 

    4 Solutions collect form web for “Aggiornamento della visualizzazione di elenco quando i dati dell'adattatore cambiano”

    sostituire:

     mMyListView.invalidate(); 

    per:

     ((BaseAdapter) mMyListView.getAdapter()).notifyDataSetChanged(); 

    Se questo non funziona, fare riferimento a questo thread: visualizzazione elenco aggiornamento di Android

    invalidate(); chiama la vista di elenco per invalidare se stessa (cioè il colore di background)
    invalidateViews(); chiama tutti i propri figli per essere invalidati. consentendo di aggiornare le viste dei bambini

    Presumo che sia un certo tipo di efficienza che impedisce che tutti gli oggetti devono costantemente essere ridisegnati se non necessario.

    Modifica questa row:

     mMyListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems)); 

    a:

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems) mMyListView.setAdapter(adapter); 

    e dopo aver aggiornato il valore di un elemento di elenco, call:

     adapter.notifyDataSetChanged(); 

    Ho trovato una soluzione più efficiente della risposta attualmente accettata, perché la risposta corrente impone di aggiornare tutti gli elementi della list. La mia soluzione aggiornerà solo un elemento (toccato) chiamando gli adattatori getView e riciclando la visualizzazione corrente che aggiunge ancora maggiore efficienza.

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // Edit object data that is represented in Viewat at list's "position" view = mAdapter.getView(position, view, parent); } });

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.