使用ViewHolder来刷新某项数据,而不用每次都全部刷新数据。

继承BaseAdapter,新建ViewHolder类。

  1. public class TestListAdapter extends BaseAdapter {
  2. private Context mContext;
  3. private List<String> strList;
  4. public TestListAdapter(Context context, List<String> list) {
  5. super();
  6. this.mContext = context;
  7. this.strList = list;
  8. }
  9. @Override
  10. public int getCount() {
  11. // TODO Auto-generated method stub
  12. return strList.size();
  13. }
  14. @Override
  15. public Object getItem(int position) {
  16. // TODO Auto-generated method stub
  17. return position;
  18. }
  19. @Override
  20. public long getItemId(int position) {
  21. // TODO Auto-generated method stub
  22. return position;
  23. }
  24. @Override
  25. public View getView(int position, View convertView, ViewGroup parent) {
  26. // TODO Auto-generated method stub
  27. ViewHolder holder = null;
  28. if (null == convertView) {
  29. convertView = LayoutInflater.from(mContext).inflate(R.layout.line, null);
  30. holder = new ViewHolder();
  31. holder.iDText = (TextView) convertView.findViewById(R.id.textView_id);
  32. holder.strText = (TextView) convertView.findViewById(R.id.textView_str);
  33. convertView.setTag(holder);
  34. } else {
  35. holder = (ViewHolder) convertView.getTag();
  36. }
  37. holder.iDText.setText(position + "");
  38. String str = strList.get(position);
  39. holder.strText.setText(str);
  40. return convertView;
  41. }
  42. private static class ViewHolder {
  43. private TextView iDText;
  44. private TextView strText;
  45. }
  46. public void updataView(int posi, ListView listView) {
  47. int visibleFirstPosi = listView.getFirstVisiblePosition();
  48. int visibleLastPosi = listView.getLastVisiblePosition();
  49. if (posi >= visibleFirstPosi && posi <= visibleLastPosi) {
  50. View view = listView.getChildAt(posi - visibleFirstPosi);
  51. ViewHolder holder = (ViewHolder) view.getTag();
  52. String txt = holder.strText.getText().toString();
  53. txt = txt + "++;";
  54. holder.strText.setText(txt);
  55. strList.set(posi, txt);
  56. } else {
  57. String txt = strList.get(posi);
  58. txt = txt + "++;";
  59. strList.set(posi, txt);
  60. }
  61. }
  62. }

在Activity中,调用updateView()方法,刷新数据。

  1. public class MainActivity extends Activity {
  2. private MainActivity mContext;
  3. private EditText idEdit;
  4. private TextView textView;
  5. private List<String> strList = new ArrayList<String>();
  6. private ListView listView;
  7. private TestListAdapter ListAdapter;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. mContext = this;
  13. for (int i = 0; i < 100; i++) {
  14. strList.add("test data");
  15. }
  16. idEdit = (EditText) findViewById(R.id.edittext_id);
  17. textView = (TextView) findViewById(R.id.textview_modify);
  18. listView = (ListView) findViewById(R.id.listview);
  19. ListAdapter = new TestListAdapter(mContext, strList);
  20. listView.setAdapter(ListAdapter);
  21. //动态刷新
  22. textView.setOnClickListener(new OnClickListener() {
  23. @Override
  24. public void onClick(View v) {
  25. // TODO Auto-generated method stub
  26. String idStr = idEdit.getText().toString();
  27. int idInt = Integer.parseInt(idStr);
  28. ListAdapter.updataView(idInt, listView);//动态修改
  29. }
  30. });
  31. }
  32. }

给出布局文件:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:background="#FFFFFF"
  6. android:orientation="vertical" >
  7. <LinearLayout
  8. android:layout_width="match_parent"
  9. android:layout_height="40dp"
  10. android:orientation="horizontal" >
  11. <EditText
  12. android:id="@+id/edittext_id"
  13. android:layout_width="200dp"
  14. android:layout_height="wrap_content"
  15. android:hint="put modify id" />
  16. <TextView
  17. android:id="@+id/textview_modify"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:text="动态修改"
  21. android:textColor="#123456" />
  22. </LinearLayout>
  23. <ListView
  24. android:id="@+id/listview"
  25. android:layout_width="match_parent"
  26. android:layout_height="wrap_content" >
  27. </ListView>
  28. </LinearLayout>

listivew 动态刷新单个item的更多相关文章

  1. memcached 最大能存储多大的单个 item?

    1MB.如果你的数据大于 1MB,可以考虑在客户端压缩或拆分到多个 key 中. 为什么单个 item 的大小被限制在 1M byte 之内? 简单的回答:因为内存分配器的算法就是这样的. 详细的回答 ...

  2. ListView只更新某个item

    方案1:针对需要更新的item调用public View getView(int position, View convertView, ViewGroup parent)即可.如: public c ...

  3. memcache 存储单个KEY,数据量过大的时候性能慢!以及简单的memcache不适合用到的场景

    今天有人问到我:memcache存储大数据量,10K,100K,1M的时候,效果怎么样??我回答:不好,效果非常慢.对方问:为什么啊??我回答不上来...于是就找了点资料. memcached使用需要 ...

  4. 局部更新listview的问题(只更新某个item)

    转:http://blog.csdn.net/wu_shu_jun/article/details/7794576 public void updateView(int itemIndex) { // ...

  5. 【飞天奔月出品】memcached四大注意事项(key长度,空格限制,最大item)

    1.   key值最大长度? memcached的key的最大长度是250个字符. 注意250是memcached服务器端内部的限制(可以修改) 如果您使用的客户端支持"key的前缀&quo ...

  6. Android开发之PullToRefresh的Click点击事件的监听实现长按删除Item

    本文为原创博客.出自http://blog.csdn.net/minimicall 到今天为止,搜芽的卖家版本号应该来说已经基本完毕.攻坚克难的一路过来.速度也控制的比較好. 项目过程进度 从任务分配 ...

  7. Android进阶笔记16:ListView篇之ListView刷新显示(全局 和 局部)

    一.ListView内容变化后,动态刷新的步骤(全局刷新): (1)更新适配器Adapter数据源:(不要使用匿名内部类) (2)调用适配器Adapter的刷新方法notifyDataSetChang ...

  8. Android进阶笔记13:ListView篇之ListView刷新显示(全局 和 局部)

    一.ListView内容变化后,动态刷新的步骤(全局刷新): (1)更新适配器Adapter数据源:(不要使用匿名内部类) (2)调用适配器Adapter的刷新方法notifyDataSetChang ...

  9. 走进缓存的世界(三) - Memcache

    系列文章 走进缓存的世界(一) - 开篇 走进缓存的世界(二) - 缓存设计 走进缓存的世界(三) - Memcache 简介 Memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用 ...

随机推荐

  1. 关于html页面布局

    之前做的一个网站,结果今天这几天测试发现在19寸屏幕和手机屏幕上页面布局全乱了,今天刚刚改好,发现还是自己经验不足,做个小总结. 一.div布局要固定宽高 当div不设计长宽高而是自动由内部控件”撑“ ...

  2. Oracle三大经典表连接适用情况

    1.1环境准备 1.2 Nested Loops Join 从上面的试验来看,nested loop jion基本上是没有限制的,可以支持所有的运算. 1.3 Hash Join 1.4 Merge ...

  3. 数组API

    1.数组的创建 var arrayObj = new Array();//创建一个默认数组,长度是0 var arrayObj = new Array(size);//创建一个size长度的数组,注意 ...

  4. Shell 之外 试试不操作 shell 来实现同样的效果

    执行程序时发生了什么当你双击桌面上的终端程序图标时,就会打开一个载入shell的程序. 你键入的命令不会直接在内核执行,而是先和 shell 进行交互.Command (eg. `ls -l')↓Te ...

  5. 代理模式 & Java原生动态代理技术 & CGLib动态代理技术

    第一部分.代理模式  代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常 ...

  6. EmguCV 轮廓

    一.相关函数 public static void cvDrawContours( IntPtr img, IntPtr contour, MCvScalar externalColor, MCvSc ...

  7. Given a compiled machine-language program, which statements in the source language cause the execution of the most machine-language instructions and what is the execution time of these instr

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION A  variety  of  studi ...

  8. A quick renice command rescheduled the upgrade to a lower priority and I was back to surfing in no time.

    https://www.nixtutor.com/linux/changing-priority-on-linux-processes/ Changing Priority on Linux Proc ...

  9. Wysiwyg Editors 标签过滤

    针对October CMS编辑器插件取消自动过滤DIV标签开关: 找到modules\backend\formwidgets\richeditor\assets\vendor\redactor\red ...

  10. Spark1.6.2 java实现读取txt文件插入MySql数据库代码

    package com.gosun.spark1; import java.util.ArrayList;import java.util.List;import java.util.Properti ...