2011-09-10 2 views
7

Sto estendendo BaseAdapter per creare una riga di listview personalizzata. Ho un menu contestuale che si apre ogni volta che un utente tiene sulla riga e chiede se vuole eliminarlo. Tuttavia come faccio a rimuovere la riga? L'hashmap è solo dati di test.Come si elimina un elemento dal mio adattatore base personalizzato?

private MyListAdapter myListAdapter; 
private ArrayList<HashMap<String, String>> items; 

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

    items = new ArrayList<HashMap<String,String>>(); 
    HashMap<String, String> map1 = new HashMap<String, String>(); 
    map1.put("date", "10/09/2011"); 
    map1.put("distance", "309 km"); 
    map1.put("duration", "1t 45min"); 
    items.add(map1); 

    myListAdapter = new MyListAdapter(this, items); 
    setListAdapter(myListAdapter); 
    getListView().setOnCreateContextMenuListener(this); 
} 


private class MyListAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<HashMap<String, String>> items; 

    public MyListAdapter(Context context, ArrayList<HashMap<String, String>> items) { 
     this.context = context; 
     this.items = items; 
    } 

    @Override 
    public int getCount() { 
     return items.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return items.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View view = convertView; 

     if (view == null) { 
      LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = layoutInflater.inflate(R.layout.row_log, null); 
     } 

     TextView rowLogOverview = (TextView) view.findViewById(R.id.rowLogOverview); 

     HashMap<String, String> item = items.get(position); 
     rowLogOverview.setText(item.get("date")); 

     return view; 
    } 
} 

risposta

15

Non si elimina dall'adattatore! Elimina dagli articoli! e l'adattatore è tra i tuoi articoli e la vista. Dalla vista è possibile ottenere la posizione e in base alla posizione è possibile eliminare elementi. Quindi l'adattatore aggiornerà le tue visualizzazioni.

Ciò significa che è necessario fare qualcosa di simile

items.remove(position); 
adapter.notifyDataSetChanged() 
+1

chiamando 'adapter.notifyDataSetChanged()' all'adattatore associato a 'items' aggiornerà listView. – Aryo

1
  1. Articolo Rimuovi dagli oggetti
  2. chiamata BaseAdapter.notifyDataSetChanged(). Quindi listview verrà ridisegnata e la riga di destinazione verrà rimossa dallo schermo.
9

Per eliminare, è necessario fare 2 cose:

  1. chiamata .remove() sulle tue ArrayList (voci).
  2. Chiamare .notifyDataSetChanged() sull'istanza della classe MyListAdapter (mListAdapter).