2011-09-10 14 views
7

Estoy extendiendo BaseAdapter para hacer una fila de vista de lista personalizada. Tengo un menú contextual que se abre cada vez que un usuario retiene en la fila y le pregunta si quiere borrarlo. Sin embargo, ¿cómo elimino la fila? El hashmap es solo datos de prueba.¿Cómo elimino un elemento de mi adaptador base personalizado?

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

Respuesta

15

¡No elimine del adaptador! ¡Usted borra de los artículos! y el adaptador se encuentra entre sus elementos y la vista. Desde la vista puede obtener la posición y según la posición puede eliminar elementos. Entonces el adaptador actualizará sus vistas.

Eso significa que hay que hacer algo como este artículo remove

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

llamar 'adapter.notifyDataSetChanged()' para el adaptador enlazado a '' de los artículos se actualizará la vista de lista. – Aryo

1
  1. de artículos
  2. llamada BaseAdapter.notifyDataSetChanged(). Entonces la vista de lista se volverá a dibujar y la fila de destino se eliminará de la pantalla.
9

Para eliminar, tendrá que hacer 2 cosas:

  1. llamada .remove() en sus ArrayList (artículos).
  2. Llame al .notifyDataSetChanged() en la instancia de su clase MyListAdapter (mListAdapter).
Cuestiones relacionadas