2011-12-05 5 views
5

Posso sapere come aggiornare l'elemento ListView dopo aver rimosso un elemento dell'elenco di mappe in SimpleAdapter personalizzato?Android: Come aggiornare l'elenco in caso di eliminazione di elementi in SimpleAdapter personalizzato

Ho implementato con successo la voce dell'elenco di eliminazione con list.remove (posizione), ma quando ho provato a chiamare la funzione list.notifyAll() ma mi ha dato un messaggio di errore come "java.lang.IllegalMonitorStateException: oggetto non bloccato per thread prima di notifyAll() ".

Spero che tu possa aiutarmi. Ecco il codice per SimpleAdapter personalizzato.

public class DeleteAdapter extends SimpleAdapter { 

    Context context; 
    List<? extends Map<String, ?>> list; 
    int resource; 
    String[] from; 
    int[] to; 

    public FDeleteAdapter(Context context, List<? extends Map<String, ?>> data, 
      int resource, String[] from, int[] to) { 
     super(context, data, resource, from, to); 

     this.context = context; 
     this.list = data; 
     this.resource = resource; 
     this.from = from; 
     this.to = to; 
     // TODO Auto-generated constructor stub 
    } 

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

     final View row = super.getView(position, convertView, parent); 

     final Button delete = (Button) row.findViewById(R.id.deletebut); 
     final TextView title = (TextView) row.findViewById(R.id.label); 

     delete.setOnClickListener(new OnClickListener() { 

      public void onClick(View view) { 

       deleteDialog xdialog = new deleteDialog(context, "Delete? ", position) { 

        @Override 
        public boolean onOkClicked() { 

         list.remove(position); 
         list.notifyAll(); 

         return true; 
        } 
       }; 
       xdialog.show(); 
      } 
     }); 

     return row; 
    } 
}; 

Grazie in anticipo per il vostro aiuto.

risposta

2

È necessario chiamare la funzione notifyDataSetChanged() dell'adapter, non notifyAll() nell'elenco.

+0

ma mi mostra "non può fare un riferimento statico al metodo non statico notifyDataSetChanged() dal tipo" ... mi può insegnare come risolverlo? – user1082138

+1

Utilizzare 'DeleteAdapter.this.notifyDataSetChanged()'. – inazaruk

+0

Sì !! sta funzionando! Grazie per il tuo aiuto ^.^ – user1082138

1

Usa

this.notifyDataSetChange(); 
+0

notifyAll() indica ad altri adattatori o thread che è stato eseguito l'aggiornamento o il suo funzionamento. –

+0

ma mi mostra "Impossibile creare un riferimento statico al metodo non statico notifyDataSetChanged() dal tipo" ... puoi insegnarmi come risolverlo? – user1082138

+0

Dai un'occhiata a me. Usa questo invece. –