2011-12-05 8 views
5

Czy mogę wiedzieć, jak odświeżyć element ListView po usunięciu elementu z listy map w dostosowanym prostym adapterze?Android: Jak odświeżyć listę po usunięciu elementu w dostosowanym prostym adapterze

Pomyślnie zaimplementowałem element listy usunięć z list.remove (pozycja), ale gdy próbowałem wywołać funkcję list.notifyAll(), ale dostałem komunikat o błędzie, taki jak "java.lang.IllegalMonitorStateException: object not locked przez wątek przed notifyAll() ".

Mam nadzieję, że możesz mi pomóc. Oto kod niestandardowego prostego adaptera.

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

Z góry dziękuję za pomoc.

Odpowiedz

2

Należy wywołać funkcję adaptera notifyDataSetChanged(), a nie notifyAll() na liście.

+0

ale pokazuje mi „Nie można uczynić statycznych odniesienie do non-statycznej metody notifyDataSetChanged() z rodzaju” ... możesz mnie nauczyć, jak go rozwiązać? – user1082138

+1

Użyj 'DeleteAdapter.this.notifyDataSetChanged()'. – inazaruk

+0

Tak !! to działa! Dziękuję za twoje pomoc ^.^ – user1082138

1

Zastosowanie

this.notifyDataSetChange(); 
+0

Funkcja notifyAll() informuje inne adaptery lub wątki o aktualizowaniu lub wykonywaniu pracy. –

+0

ale pokazuje mi "Nie można utworzyć statycznego odwołania do metody niestatycznej notifyDataSetChanged() z typu" ... możesz nauczyć mnie, jak go rozwiązać? – user1082138

+0

Sprawdź mnie edytować. Użyj tego zamiast tego. –

Powiązane problemy