2011-09-13 18 views
30

Nella mia app, se si fa clic su un pulsante, allora voglio rimuovere tutti gli oggetti listview. Qui, sto usando l'adattatore di base per aggiungere gli oggetti alla vista elenco.Come rimuovere listview tutti gli articoli

Come posso rimuovere gli oggetti listview dinamicamente.

+1

dinamicamente passare getCount, per cancellare passare zero come getCount – Abhi

+7

listview.setAdapter (null); –

+0

Grazie Abhi, questo mi ha davvero aiutato. Sovrascrivere il metodo getCount .... – slodeveloper

risposta

32

chiamata setListAdapter() di nuovo. Questa volta con un ArrayList vuoto.

+1

qui sto usando il baseadapter – naresh

+1

Qui, se si fa clic sul pulsante, la voce listview di dati vecchi verrà rimossa dopo che i nuovi elementi saranno aggiunti alla vista elenco. è possibile con questo? – naresh

+0

Sì, è possibile chiamare setListAdaptor() con nuovi dati, se necessario. – mah

0

rimuovere i dati dal adapter e chiamare adapter.notifyDataSetChanged();

+0

come rimuovere i dati dall'adpater? – naresh

+0

mentre dichiarando l'adattatore avresti passato dei valori in qualche modo ... rimuovi il valore da lì .... –

+0

Questa è la domanda. Come rimuovere gli articoli dall'adattatore. – JaydeepW

9

se si utilizza l'oggetto Elenco e si passa all'adattatore, è possibile rimuovere il valore dall'oggetto List e quindi chiamare notifyDataSetChanged() utilizzando l'oggetto adapter.

per es.

List<String> list = new ArrayList<String>(); 
ArrayAdapter adapter; 


adapter = new ArrayAdapter<String>(DeleteManyTask.this, 
      android.R.layout.simple_list_item_1, 
      (String[])list.toArray(new String[0])); 

listview = (ListView) findViewById(R.id.list); 
listview.setAdapter(adapter); 

listview.setAdapter(listAdapter); 

per rimuovere lo fanno in questo modo

list.remove(index); //or 
list.clear(); 
adpater.notifyDataSetChanged(); 

o senza lista degli oggetti Rimuovi elemento dalla lista.

adapter.clear(); 
adpater.notifyDataSetChanged(); 
+0

sto usando l'adattatore di base. quindi non ho chiaro(). come rimuoverlo? – naresh

+0

puoi cancellarmi il codice con la modifica nella tua domanda? – Pratik

0

uso una qualsiasi delle opzioni soffietto che suite vostro requisito

listview.removeViews(1,listview.getChildCount()); 

o

listview.removeViewInLayout(your view); 
20

ListView opera in base ai dati sottostanti nel Adapter. Per cancellare il ListView devi fare due cose:

  1. Cancellare i dati impostati dall'adattatore.
  2. aggiornare la vista chiamando notifyDataSetChanged

Ad esempio, vedere lo scheletro di SampleAdapter sotto che estende il BaseAdapter


public class SampleAdapter extends BaseAdapter { 

    ArrayList<String> data; 

    public SampleAdapter() { 
     this.data = new ArrayList<String>(); 
    } 

    public int getCount() { 
     return data.size(); 
    } 

    public Object getItem(int position) { 
     return data.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     // your View 
     return null; 
    } 
} 

Qui avete la ArrayList<String> data come i dati per l'adattatore. Anche se non è necessario utilizzare ArrayList, nel codice sarà presente qualcosa di simile per rappresentare i dati in ListView

Successivamente si fornisce un metodo per cancellare questi dati, l'implementazione di questo metodo è di cancellare la struttura dati sottostante


public void clearData() { 
    // clear the data 
    data.clear(); 
} 

Se si utilizza qualsiasi sottoclasse di Collection, avranno clear() metodo che si può usare come sopra.

Una volta che avete questo metodo, si desidera chiamare clearData e notifyDataSetChanged sul tuo onClick così il codice per onClick sarà simile:


// listView is your instance of your ListView 
SampleAdapter sampleAdapter = (SampleAdapter)listView.getAdapter(); 
sampleAdapter.clearData(); 

// refresh the View 
sampleAdapter.notifyDataSetChanged(); 
4

Ho usato questa dichiarazione e ha funzionato per me:

setListAdapter(null) 

Questo chiama un costruttore predefinito che non fa nulla in una classe estende BaseAdapter.

+1

questo interromperà Android 2.1 –

3

Mi basta pulire l'array, provare values.clear();

values = new ArrayList<String>(); 
values.clear(); 

ArrayAdapter <String> adapter; 
adapter = new ArrayAdapter<String>(this, R.layout.list,android.R.id.text1, values); 
lista.setAdapter(adapter); 
7

È possibile utilizzare solo

lv.setAdapter(null); 
Problemi correlati