爱程序网

ListView中响应item的点击事件并且刷新界面

来源: 阅读:

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

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

点击事件写在了adapter的item中,不知道如何在listview的点击事件中更新数据的显示:

总结:1.要使用notifyDataSetChanged();刷新界面需要满足setAdapter时传入的存储数据的对象是同一个,并且数据要发生改变;

(setAdapter时传入的List集合中存储bean对象,setadapter(this,List<Info> list),对bean对象的数据进行修改后,要进行更新界面需要list.clear(),list.addall(query());)


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();

 

 


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

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助