你的位置:首页 > 操作系统

[操作系统]ListView中响应item的点击事件并且刷新界面


---恢复内容开始---

最近在在实现listview功能中遇到了这个问题:

点击事件写在了adapter的item中,不知道如在listview的点击事件中更新activity的点击事件,折腾了许久,终于解决,以下为实现的步骤:

1.要实现的功能:点击垃圾桶,删除该item,具体布局如下图

2.avtivity将数据封装成bean对象存在list集合infos中,传送给adaper

1 //从数据库中查询所有数据,dao是数据库操作对象2 BlackContactsDao dao = new BlackContactsDao(this);3 List<BlackContactsInfo> infos = dao.queryALL();4 //将返回的数据添加到list集合中,传送给adapter显示5 mdapter = new BlackContactsItemAdapter(this,infos);6 blackcontactsLvList.setAdapter(mdapter);  

3.adaper收到数据后进行显public class BlackContactsItemAdapter extends BaseAdapter {

  List<BlackContactsInfo> infos;  Context context;  String type;  //有参构造,传进infos数据,跟context  public BlackContactsItemAdapter(Context context, List<BlackContactsInfo> infos) {    this.infos = infos;    this.context =context;  }  @Override  public int getCount() {    return infos.size();  }  @Override  public Object getItem(int position) {    return null;  }  @Override  public long getItemId(int position) {    return 0;  }  @Override  public View getView(int position, View convertView, ViewGroup parent) {    ViewHolder holder = null;    if(convertView == null) {      convertView = View.inflate(context, R.layout.item_blackcontacts_list, null);      holder = new ViewHolder();      //找控件      holder.ivdele = (ImageView) convertView.findViewById(R.id.blackcontacts_iv_dele);      holder.tvPhone = (TextView) convertView.findViewById(R.id.item_blackcontacts_phone);      holder.tvType = (TextView) convertView.findViewById(R.id.item_blackcontacts_type);      //给converview打上标签      convertView.setTag(holder);    }else{      holder = (ViewHolder) convertView.getTag();    }    final BlackContactsInfo info ;    info = infos.get(position);      switch (info.type){        case 0:          type = "电话";          break;        case 1:          type = "短信";          break;        case 2:          type = "电话+短信";          break;      }
holder.tvPhone.setText(info.phone); holder.tvType.setText(type); //给item中的垃圾桶设置点击事件 holder.ivdele.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //当垃圾桶被点击了,就根据被点击的item的号码,从数据库中删除 BlackContactsDao dao = new BlackContactsDao(context); dao.delete(info.phone); //以下下为核心代码,更新ui infos.remove(info); notifyDataSetChanged(); } }); return convertView; } class ViewHolder{ ImageView ivdele; TextView tvPhone,tvType; }}

4.核心代码:

        //在对数据库进行删除该数据后,也要对传给listview的数据(list集合进行更新数据),infos集合要移除点击的对象        infos.remove(info);        //再调用notifyDataSetChanged();才可以真正实现数据更新。        notifyDataSetChanged();

 

 

---恢复内容结束---