2013-01-15 19 views
10

Ho alcuni problemi durante il tentativo di rimuovere un elemento dalla visualizzazione elenco su clic lungo. Di seguito è riportato il codice:android - rimozione di elementi da ListView su clic lungo

public class MListViewActivity extends ListActivity { 

private ListView lv; 
private String[] some_data = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    some_data = getResources().getStringArray(R.array.mdata); 

    // Bind resources Array to ListAdapter 
    ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, 
      R.layout.list_item, R.id.label, some_data); 
    this.setListAdapter(myAdapter); 

    lv = getListView(); 
    lv.setDividerHeight(3); 

    lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, 
       int arg2, long arg3) { 

      // Can't manage to remove an item here 

      return false; 
     } 
    }); 
} 

Ogni aiuto è apprezzato

+0

Sii più specifico. Errori, tracce di stack, cosa non funziona, cosa non riesci a gestire? – jlindenbaum

+1

Si dovrebbe prendere in considerazione l'utilizzo di questo se si dispone di una barra delle azioni nell'applicazione http://developer.android.com/guide/topics/ui/menus.html#context-menu in aggiunta alla risposta di @TNR –

risposta

14

Si consiglia di non utilizzare Arrays, è necessario utilizzare ArrayList per rimuovere e aggiungere elementi a una Listview.

Una volta dichiarata la dimensione dell'array, è possibile modificare i dati in un indice particolare ma non è possibile rimuovere gli elementi o aggiungervi.

Quindi prendi una lista di array e, quando fai un lungo clic sull'oggetto ListView, chiama semplicemente il metodo di rimozione di Arraylist e notifica il set di dati modificato.

Esempio:

ArrayList<String> al = new ArrayList<String>(); 

all'interno del vostro longclick scrivere il codice qui sotto per rimuovere voce.

al.remove(arg2);//where arg2 is position of item you click 
myAdapter.notifyDataSetChanged(); 
9

provare

lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, 
      int position, long arg3) { 

       myAdapter.remove(some_data[position]); 
       myAdapter.notifyDataSetChanged(); 

     return false; 
    } 

}); 
+0

lancia un UnsupportedOperationException – Droidman

+0

esattamente stavo cercando. Se si utilizza un ListView o qualsiasi sottoclasse, utilizzare il metodo sopra per ottenere l'elemento in attesa dall'elenco – Clocker

-1

Ho avuto problemi con questo metodo. e l'ho risolto usando questo.

  listStat.remove(listStat.get(arg2)); 
      lvStat.requestLayout(); 
      adapterStat.notifyDataSetChanged(); 

Penso che questo aiuterà gli altri.

+0

Ho riscontrato un problema simile. Cosa è 'lvStat' qui nel tuo codice? – Chip

+0

@pc listview reference –

+0

Ho 'VideoView',' ImageView' e 'TextView' nel mio ListView. Funziona per 'ImageView' e' TextView' ma non per 'VideoView' – Chip

Problemi correlati