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刷新相关推荐

  1. ListView如何单独刷新一个item

    扣扣技术交流群:460189483 对于ListView数据的刷新大家都知道,改变Adapter的数据源,然后调用Adapter的notifyDateSetChanged()方法即可. 但是我在做公司 ...

  2. Android 用HorizontalScrollView实现ListView的Item滑动删除

    原理: 利用HorizontalScrollView可以横向滚动的特点实现滑动,根据动态的设置要展示的区域宽度,使得其余选项操作被挤出屏幕外面,从而实现单条滑动菜单的样式. 实现步骤: 实现Listv ...

  3. Android 用HorizontalScrollView实现ListView的Item滑动删除 ,滑动错乱 冲突

    用HorizontalScrollView实现类似微信的滑动删除 测试于:Android2.2+ 对于Android来说按键操作已经在减少,越来越多的手势操作层出不穷,今天介绍一款LIstView的I ...

  4. android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)...

    1.因为给LISTVIEW增加了两个头布局,所以在点击事件ITEM索引会增加2,比如原来第一条数据的索引应该为0,增加两个头布局后,它的索引变为        2,为了使LISTVIEW的ITEM在点 ...

  5. Android ListView侧滑item,仿QQ删除效果

    尊重原创,转载请注明(http://blog.csdn.net/aoshiwenrou/article/details/42971193) 最近的项目需求有一条是要实现仿QQ的侧滑删除效果,网上搜到了 ...

  6. ListView下拉刷新、上拉载入更多之封装改进

    在Android中ListView下拉刷新.上拉载入更多示例一文中,Maxwin兄给出的控件比较强大,前面有详细介绍,但是有个不足就是,里面使用了一些资源文件,包括图片,String,layout,这 ...

  7. Android学习之——ListView下拉刷新

    背景知识 ListView使用非常广泛,对于使用ListView的应用来说,下拉刷新是必不可少要实现的功能. 我们常用的微博.网易新闻,搜狐新闻都使用了这一功能,如下图所示.     微博 搜狐新闻 ...

  8. Android ListView下拉刷新时卡的问题解决小技巧

    问题:ListView下拉刷新时看上去非常的卡 解决方案: 在BaseAdapter的getView方法中,有三个参数 public View getView(int position, View c ...

  9. android中上拉下滑布局,3年以上勿进!最简单的Android自定义ListView下拉刷新与上拉加载,代码直接拿去用~...

    本文主要针对开发新手,手写实现一个最简单Android自定义listview下拉刷新和上拉加载demo. 不喜可喷,欢迎大佬留言指点. 效果图 一:编写需要在ListView中增加头加载的布局文件,与 ...

最新文章

  1. Oracel 修改约束命令
  2. 判断是否为两位数(信息学奥赛一本通-T1044)
  3. rpm安装mysql
  4. ASP.NET MVC 企业级实战 —— 创建用户权限管理范例程序(三)
  5. SMOTE算法原理及程序python(新手版)
  6. 2022考研肖秀荣精讲精练pdf电子版
  7. Mac 谷歌浏览器chrome恶意插件劫持Any search(TotalSearchToolbox)处理
  8. 每日哲学与编程练习3——无重复数字(Python实现)
  9. 免费软电话 — X-Lite 的安装及配置向导
  10. Excel图表5——旋风图(对称条形图)
  11. (五)具名和匿名挂载
  12. Scrapy爬虫项目的管理部署
  13. 选择CRM时的注意事项
  14. JavaWeb - JSON、Protobuf、Thrift、MessagePack 对比和开发指南
  15. 7 linux 配置链路聚合_linux – 在智能交换机上设置链路聚合组(L...
  16. terraform登录ec2实例
  17. vmware12虚拟机下载安装
  18. 科学计算机按次方怎么在按括号,如何使用多功能计算器?
  19. 计算机考研面试翻译题,【北大计算机辅助翻译CAT考研】复试真题 复试参考书 复试面试真题...
  20. Hibernate(五)多对多映射关系

热门文章

  1. Java运行乱码,Idea编码设置
  2. SpringSecurity(一)
  3. 主成分分析,充分图,聚类,主成分回归——数据分析与R语言 Lecture 11
  4. DHCP协议详解及DHCP服务的配置
  5. JQuery实现图片点击放大
  6. ASP.NET WEBAPI 跨域请求 405错误
  7. 网上在线培训平台哪家好?
  8. CAJ如何转化为PDF文件
  9. js踩坑汇总(一).md
  10. 冒泡排序法(Java实现)