ListView 单条item刷新
listView列表刷新某一条数据时采用notifyDataSetChanged()代价有点高,最好能局部刷新。局部刷新的重点是,找到要更新的那项的View,然后再根据业务逻辑更新数据即可。
大概就是3步:
1.找到要更新的那条数据的item 对于的view
因为listView条目的复用,所以当前点击的位置对应的条目为position-FirstVisiblePosition
2.获取该item中对于的相关View ,修改相关view显示的值
3.获取该item中对于的相关View ,修改相关view显示的值
举个例子:
public class ListAdapter extends BaseAdapter{private List<Person> mList;private Context mContext;private int count=0;public ListAdapter(List<Person> list) {mList = list;}@Overridepublic int getCount() {return mList!=null?mList.size():0;}@Overridepublic Object getItem(int position) {return mList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {count++;Log.d("getView被调用的次数===",count+"");mContext=parent.getContext();ViewHolder holder=null;if(convertView==null){holder=new ViewHolder();convertView= LayoutInflater.from(mContext).inflate(R.layout.list_item,parent,false);holder.mTextView= (TextView) convertView.findViewById(R.id.tv);convertView.setTag(holder);}else{holder= (ViewHolder) convertView.getTag();}String s = mList.get(position).getName();holder.mTextView.setText(s);return convertView;}private static class ViewHolder{TextView mTextView;}
}
public class Person {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}
public class MainActivity extends AppCompatActivity {private ListView mListView;private List<Person> mList=new ArrayList<>();private ListAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();setListener();}private void setListener() {mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {int firstVisiblePosition = mListView.getFirstVisiblePosition(); //屏幕内当前可以看见的第一条数据if(position-firstVisiblePosition>=0){//1.获取当前点击的条目的viewView itemView = mListView.getChildAt(position - firstVisiblePosition);//2.查找出相应的控件TextView textView= (TextView) itemView.findViewById(R.id.tv);//3.更新uitextView.setText("我是更新后的数据"+position);//4.更新数据源mList.get(position).setName("我是更新后的数据"+position);}}});}private void initData() {Person person=null;for (int i = 0; i < 30; i++) {person=new Person();person.setName("条目"+i);mList.add(person);}mAdapter=new ListAdapter(mList);mListView.setAdapter(mAdapter);}private void initView() {mListView= (ListView) findViewById(R.id.lv);}
}
listView列表刷新某一条数据时采用notifyDataSetChanged()代价有点高,最好能局部刷新。局部刷新的重点是,找到要更新的那项的View,然后再根据业务逻辑更新数据即可。
大概就是3步:
1.找到要更新的那条数据的item 对于的view
因为listView条目的复用,所以当前点击的位置对应的条目为position-FirstVisiblePosition
2.获取该item中对于的相关View ,修改相关view显示的值
3.获取该item中对于的相关View ,修改相关view显示的值
举个例子:
public class ListAdapter extends BaseAdapter{private List<Person> mList;private Context mContext;private int count=0;public ListAdapter(List<Person> list) {mList = list;}@Overridepublic int getCount() {return mList!=null?mList.size():0;}@Overridepublic Object getItem(int position) {return mList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {count++;Log.d("getView被调用的次数===",count+"");mContext=parent.getContext();ViewHolder holder=null;if(convertView==null){holder=new ViewHolder();convertView= LayoutInflater.from(mContext).inflate(R.layout.list_item,parent,false);holder.mTextView= (TextView) convertView.findViewById(R.id.tv);convertView.setTag(holder);}else{holder= (ViewHolder) convertView.getTag();}String s = mList.get(position).getName();holder.mTextView.setText(s);return convertView;}private static class ViewHolder{TextView mTextView;}
}
public class Person {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}
public class MainActivity extends AppCompatActivity {private ListView mListView;private List<Person> mList=new ArrayList<>();private ListAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();setListener();}private void setListener() {mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {int firstVisiblePosition = mListView.getFirstVisiblePosition(); //屏幕内当前可以看见的第一条数据if(position-firstVisiblePosition>=0){//1.获取当前点击的条目的viewView itemView = mListView.getChildAt(position - firstVisiblePosition);//2.查找出相应的控件TextView textView= (TextView) itemView.findViewById(R.id.tv);//3.更新uitextView.setText("我是更新后的数据"+position);//4.更新数据源mList.get(position).setName("我是更新后的数据"+position);}}});}private void initData() {Person person=null;for (int i = 0; i < 30; i++) {person=new Person();person.setName("条目"+i);mList.add(person);}mAdapter=new ListAdapter(mList);mListView.setAdapter(mAdapter);}private void initView() {mListView= (ListView) findViewById(R.id.lv);}
}
微信关注 “安卓集中营”,获取更多
或者扫码关注
一起共同学习探讨
ListView 单条item刷新相关推荐
- ListView如何单独刷新一个item
扣扣技术交流群:460189483 对于ListView数据的刷新大家都知道,改变Adapter的数据源,然后调用Adapter的notifyDateSetChanged()方法即可. 但是我在做公司 ...
- Android 用HorizontalScrollView实现ListView的Item滑动删除
原理: 利用HorizontalScrollView可以横向滚动的特点实现滑动,根据动态的设置要展示的区域宽度,使得其余选项操作被挤出屏幕外面,从而实现单条滑动菜单的样式. 实现步骤: 实现Listv ...
- Android 用HorizontalScrollView实现ListView的Item滑动删除 ,滑动错乱 冲突
用HorizontalScrollView实现类似微信的滑动删除 测试于:Android2.2+ 对于Android来说按键操作已经在减少,越来越多的手势操作层出不穷,今天介绍一款LIstView的I ...
- android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)...
1.因为给LISTVIEW增加了两个头布局,所以在点击事件ITEM索引会增加2,比如原来第一条数据的索引应该为0,增加两个头布局后,它的索引变为 2,为了使LISTVIEW的ITEM在点 ...
- Android ListView侧滑item,仿QQ删除效果
尊重原创,转载请注明(http://blog.csdn.net/aoshiwenrou/article/details/42971193) 最近的项目需求有一条是要实现仿QQ的侧滑删除效果,网上搜到了 ...
- ListView下拉刷新、上拉载入更多之封装改进
在Android中ListView下拉刷新.上拉载入更多示例一文中,Maxwin兄给出的控件比较强大,前面有详细介绍,但是有个不足就是,里面使用了一些资源文件,包括图片,String,layout,这 ...
- Android学习之——ListView下拉刷新
背景知识 ListView使用非常广泛,对于使用ListView的应用来说,下拉刷新是必不可少要实现的功能. 我们常用的微博.网易新闻,搜狐新闻都使用了这一功能,如下图所示. 微博 搜狐新闻 ...
- Android ListView下拉刷新时卡的问题解决小技巧
问题:ListView下拉刷新时看上去非常的卡 解决方案: 在BaseAdapter的getView方法中,有三个参数 public View getView(int position, View c ...
- android中上拉下滑布局,3年以上勿进!最简单的Android自定义ListView下拉刷新与上拉加载,代码直接拿去用~...
本文主要针对开发新手,手写实现一个最简单Android自定义listview下拉刷新和上拉加载demo. 不喜可喷,欢迎大佬留言指点. 效果图 一:编写需要在ListView中增加头加载的布局文件,与 ...
最新文章
- Oracel 修改约束命令
- 判断是否为两位数(信息学奥赛一本通-T1044)
- rpm安装mysql
- ASP.NET MVC 企业级实战 —— 创建用户权限管理范例程序(三)
- SMOTE算法原理及程序python(新手版)
- 2022考研肖秀荣精讲精练pdf电子版
- Mac 谷歌浏览器chrome恶意插件劫持Any search(TotalSearchToolbox)处理
- 每日哲学与编程练习3——无重复数字(Python实现)
- 免费软电话 — X-Lite 的安装及配置向导
- Excel图表5——旋风图(对称条形图)
- (五)具名和匿名挂载
- Scrapy爬虫项目的管理部署
- 选择CRM时的注意事项
- JavaWeb - JSON、Protobuf、Thrift、MessagePack 对比和开发指南
- 7 linux 配置链路聚合_linux – 在智能交换机上设置链路聚合组(L...
- terraform登录ec2实例
- vmware12虚拟机下载安装
- 科学计算机按次方怎么在按括号,如何使用多功能计算器?
- 计算机考研面试翻译题,【北大计算机辅助翻译CAT考研】复试真题 复试参考书 复试面试真题...
- Hibernate(五)多对多映射关系