2011-12-05 30 views
5

Tôi có thể biết làm thế nào để làm mới mục ListView sau khi tôi đã loại bỏ một mục danh sách bản đồ trong SimpleAdapter tùy chỉnh?Android: Làm thế nào để làm mới danh sách khi xóa mục trong tùy chỉnh SimpleAdapter

Tôi đã triển khai thành công mục danh sách xóa với list.remove (vị trí), nhưng khi tôi đã cố gọi hàm list.notifyAll() nhưng nó đã cho tôi thông báo lỗi như "java.lang.IllegalMonitorStateException: đối tượng không bị khóa theo chuỗi trước khi thông báoAll() ".

Tôi hy vọng bạn có thể giúp tôi. Đây là mã cho SimpleAdapter tùy chỉnh.

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

Cảm ơn trước sự giúp đỡ của bạn.

Trả lời

2

Bạn nên gọi cho chức năng của Bộ điều hợp notifyDataSetChanged(), chứ không phải notifyAll() trong danh sách.

+0

nhưng nó cho thấy tôi "không thể làm cho một tham chiếu tĩnh với phương pháp không tĩnh notifyDataSetChanged() từ các loại" ... bạn có thể dạy tôi làm thế nào để giải quyết nó? – user1082138

+1

Sử dụng 'DeleteAdapter.this.notifyDataSetChanged()'. – inazaruk

+0

Có !! nó hoạt động! Cảm ơn bạn đã giúp bạn ^.^ – user1082138

1

Sử dụng

this.notifyDataSetChange(); 
+0

notifyAll() cho các adapter hoặc các bộ điều hợp khác cập nhật hoặc thực hiện công việc của nó. –

+0

nhưng nó cho tôi thấy "Không thể tạo tham chiếu tĩnh đến phương thức không tĩnh notifyDataSetChanged() từ loại" ... bạn có thể dạy tôi cách giải quyết nó không? – user1082138

+0

Hãy xem tôi chỉnh sửa. Sử dụng thay vào đó. –

Các vấn đề liên quan