2011-12-05 25 views
5

我可以知道如何在自定义SimpleAdapter中删除地图列表项目后刷新ListView项目吗?Android:如何在自定义SimpleAdapter中删除项目时刷新列表

我已经用list.remove(position)成功实现了删除列表项,但是当我尝试调用list.notifyAll()函数时,它却给了我错误消息,比如“java.lang.IllegalMonitorStateException:object not locked通过notifyAll()之前的线程“。

我希望你能帮助我。这是自定义SimpleAdapter的代码。

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

非常感谢您的帮助。

回答

2

您应该调用适配器的notifyDataSetChanged()功能,而不是notifyAll()的名单上。

+0

但它显示我“不能让一个静态引用从类型的非静态方法notifyDataSetChanged()” ......你能教我如何解决呢? – user1082138

+1

使用'DeleteAdapter.this.notifyDataSetChanged()'。 – inazaruk

+0

是的!它正在工作!感谢您的帮助^。^ – user1082138

1

使用

this.notifyDataSetChange(); 
+0

notifyAll()告诉其他适配器或线程它已完成更新或工作。 –

+0

,但它显示我“不能从类型”的静态引用非静态方法notifyDataSetChanged()... ...你能教我如何解决它? – user1082138

+0

看看我编辑。改用它。 –

相关问题