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
//从数据库中查询所有数据,dao是数据库操作对象
BlackContactsDao dao = new BlackContactsDao(this);
List<BlackContactsInfo> infos = dao.queryALL();
//将返回的数据添加到list集合中,传送给adapter显示
mdapter = new BlackContactsItemAdapter(this,infos);
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();
---恢复内容结束---
ListView中响应item的点击事件并且刷新界面的更多相关文章
- ListView中的Item不能点击的解决方法
有时,为了实现某种功能,在Android程序中会考虑在ListView的每一个Item中添加一个Button(或ImageButton等). 但是,这样会出现一个问题: 当同时设置了Button的on ...
- ListView使用自定义适配器的情况下实现适配器的控件点击事件执行Activity界面中的方法
如果ListView使用的是自定义的适配器,比如MyArrayAdapter extends ArrayAdapter<String> 那么,如何实现适配器中的点击事件执行activity ...
- Android处理ListView中的Item中的Button按钮不能点击的问题
问题描述:ListView列表中的Button按钮按钮不能点击 解决办法:在ListView中的Item项的布局文件中加上:android:descendantFocusability="b ...
- ListView中的组件Button的OnClick事件触发时机
Android开发时,ListView中的组件Button的OnClick事件必须在ListView之外的组件事件触发后才能触发? 此处ListView无OnItemClick事件,而且ListVie ...
- AndroidのListView之滑动列表项(点击事件和滑动事件共存)
这里正好在项目有这么一个bt的需求,如下图ListView的item可以响应点击事件也可以响应item的左右滑动事件,两个事件可以相互独立互不影响. 听说iphone的list选项就有这样bt的功能, ...
- RecylerView为item添加点击事件
RecyclerView侧重的是布局的灵活性,虽说可以替代ListView但是连基本的点击事件都没有,这篇文章就来详细讲解如何为RecyclerView的item添加点击事件. 1 原理: 为Recy ...
- listView中adapter有不同的click事件的简单写法
在android中,listview一般都是通过一个adapter来绑定数据,一般的item的点击事件都会指向同一个目标(intent),仅仅是所带的參数不同而已.但有的时候事与愿违,每一个item的 ...
- 为RecyclerView添加item的点击事件
RecyclerView侧重的是布局的灵活性,虽说可以替代ListView但是连基本的点击事件都没有,这篇文章就来详细讲解如何为RecyclerView的item添加点击事件,顺便复习一下观察者模式. ...
- ExpandableListView实现子Item的点击事件
在继承的BaseExpandableListAdapter的ExpandableListView的Adapter中,重写以下方法 @Override public boolean isChildSel ...
随机推荐
- 查询Oracle正在执行的sql语句
--查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, ...
- XDocument读取xml的所有元素以及XPath语法
原文 http://www.cnblogs.com/xxyishutong/p/3326375.html <?xml version="1.0" encoding=&quo ...
- 群星云集 BOSS上海时装秀—情沪魅影- 在线观看 - 乐视网
群星云集 BOSS上海时装秀-情沪魅影- 在线观看 - 乐视网 群星云集 BOSS上海时装秀-情沪魅影
- LNMP : 502 Bad Gateway 解决小记,真正的原因
站点搬迁到新的server.原先一直都是LAMP.如今改为LNMP. 将重写文件 htaccess改成 nginx的 conf.放到了站点.可仅仅能打开首页,其它重写页面一打开都是不停的载入. 载入等 ...
- android 回调
调函数(callback Function),顾名思义,用于回调的函数. 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用 ...
- MySQL 5.6.19 二进制安装
1. 操作系统 CentOS release 6.2 (Final) 2. 创建用户和组 [root@mymaster1 ~]# groupadd mysql [root@ ...
- 核心基础以及Fragment与Activity传递数据完整示例
MainActivity如下: package cc.testsimplefragment0; import android.os.Bundle; import android.app.Activit ...
- Unity3D-第一视角射击游戏
一.新建关卡 File,Save Scene,File,New Scene,File,Save Scene as... ,Level02.unity 1.建立场景 从Assets中拖放场景模型到Hie ...
- HTML之学习笔记(九)表单
html的表单标签是一个系列,用开闭的<form>标签包裹起来的组合.表单的作用是将我们要向服务器提交数据的数据包含起来,然后提交到服务器处理.(使用表单是浏览器提交客户端数据到服务端的方 ...
- Process Node.js 进程
Process 进程 process.argv 是命令行参数数组,第一个元素是node,第二个元素是脚本文件名,从第三个元素开始每个元素是一个运行参数. process.stdout 标准输出流 co ...