使用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. thinkphp条件查询和模糊查询的一些方法

    #文章管理 public function adminArticle(){ $adminArticle=M("article"); $arr_seach=$this->sea ...

  2. HTTP协议 (四) 缓存

    HTTP协议 (四) 缓存 阅读目录 缓存的概念 缓存的好处 Fiddler可以方便地查看缓存的header 如何判断缓存新鲜度 通过最后修改时间,判断缓存新鲜度 与缓存相关的header ETag ...

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

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

  4. Mysql 性能调优之Memory 计算

    最近在做mariadb 数据库性能调优时发现,配置文件影响着整个数据库的性能的百分之80(这么说不为过),现在就我出现的问题来分析. 在压测mariadb时,tail 日志.发现压测到一半 ,数据库会 ...

  5. Android课程---关于对话框的学习

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  6. Android课程---寄存器与存储器的区别

    存储器在CPU外,一般指硬盘,U盘等可以在切断电源后保存资料的设备,容量一般比较大,缺点是读写速度都很慢,普通的机械硬盘读写速度一般是50MB/S左右.内存和寄存器就是为了解决存储器读写速度慢而产生的 ...

  7. git命令详解(转)

    Git使用 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有 ...

  8. 奥迪--A4L

    -型号:A4L -价格:30-41W -动力:2T -变速箱:7挡双离合 -长宽高:4.81,1.84,1.43 -油箱:54L -发动机:EA888 -大灯:氙气(选装LED)

  9. rsync组合inotify-tools完成实时同步[转]

    一. 什么是inotify inotify是一种强大的.细粒度的.异步的文件系统事件监控机制,Linux内核从2.6.13开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件 ...

  10. 透过proxy进行docker pull(Centos6.8)

    由于必须通过proxy代理上网. 使用docker pull时一直出现如下错误: [root@centoo65 ~]# sudo HTTP_PROXY=http://186.100.4.107:808 ...