动态刷新ListView中的某个item
来源:互联网 发布:arctime字幕软件官方 编辑:程序博客网 时间:2024/06/05 15:06
1.需求
遇到一个需求,从手机里面获取到所有的视频后,可以选择多个视频文件进行上传操作,在列表展示里面,每个视频文件都会显示缩略图,且每个item中均包含checkbox,之前的做法是每次点击一个checkbox,刷新选择的总数,并更新整个listview中的item,这样消耗很大,而且缩略图在每次点击后会重新加载,使得UI变得卡顿。
2.解决思路
在可视范围内,点击某个item,则通过position得到该item对应的内容,然后对该内容进行更新,并通过适配器adapter的数据源(比如mList)的set(int postion,Object object)方法更新被选择的item即可。
3.代码
适配器
package demo.xzy.qh.com.listviewdemo_1_update_item_dynamin;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import java.util.List;/** * Company:QIHAN TECH * Date:2017/7/18 * Author:Created by XuZhuYun * Describe: */public class MyAdapter extends BaseAdapter { private List<String> mList; public List<String> getList() { return mList; } public void setList(List<String> list) { mList = list; notifyDataSetChanged(); } @Override public int getCount() { return mList == null ? 0 : mList.size(); } @Override public Object getItem(int position) { return mList == null ? null : mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder mViewHolder = null; if (convertView == null) { mViewHolder = new ViewHolder(); convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false); mViewHolder.mTitleTv = (TextView) convertView.findViewById(R.id.title_tv); convertView.setTag(mViewHolder); } else { mViewHolder = (ViewHolder) convertView.getTag(); } if (getCount() > 0) { String value = mList.get(position); mViewHolder.mTitleTv.setText(value); } return convertView; } public void updateItem(int position, ListView listView) { int visibleFirstPosi = listView.getFirstVisiblePosition(); int visibleLastPosi = listView.getLastVisiblePosition(); if (position >= visibleFirstPosi && position <= visibleLastPosi) { View view = listView.getChildAt(position - visibleFirstPosi); //原来item的值 String chosedText = (String) getItem(position); String newText = "哈哈哈哈哈"; //更新数据源指定位置的数据 mList.set(position, newText); //通知适配器 notifyDataSetChanged(); } } class ViewHolder { TextView mTitleTv; }}调用
package demo.xzy.qh.com.listviewdemo_1_update_item_dynamin;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import java.util.ArrayList;import java.util.List;/** * 动态更新listview中的item数据 */public class MainActivity extends Activity implements AdapterView.OnItemClickListener { private MyAdapter mMyAdapter; private ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.my_test_lv); mMyAdapter = new MyAdapter(); mListView.setAdapter(mMyAdapter); mListView.setOnItemClickListener(this); initTestData(); } private void initTestData() { List<String> mStrList = new ArrayList<>(); for (int i = 0; i < 15; i++) { mStrList.add("测试数据" + i); } if (mMyAdapter == null) { return; } mMyAdapter.setList(mStrList); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String value = (String) mMyAdapter.getItem(position); //动态更新 mMyAdapter.updateItem(position, mListView); }}
4.参考
官方文档https://developer.android.google.cn/reference/android/widget/ListView.html
阅读全文
1 0
- 动态刷新ListView中的某个item
- 刷新listView中的某个Item
- 刷新ListView某个Item状态
- android listview单个item刷新某个控件
- ListView动态刷新某项Item
- ListView动态刷新某项Item
- ListView动态刷新某项Item,不刷新整个列表
- 动态刷新listview中的数据
- ListView 隐藏 某个Item
- ListView刷新指定item
- ListView刷新单个item
- listview单个刷新item
- listview 刷新某一个item
- listView刷新单个Item
- listView item 部分刷新
- ListView刷新单个Item
- listview 刷新部分item
- 关于ListView中item动态刷新下载进…
- OpenCV3.2-contrib 编译通过文件及配置
- 利用SSD和自己训练好的模型进行目标检测
- Java JDBC 连接数据库
- 欢迎使用CSDN-markdown编辑器
- 数值后缀+H B表示几进制
- 动态刷新ListView中的某个item
- Laravel+LDAP 个人遇到的问题の全记录
- TreeSet比较器的用法
- Makefile学习笔记1
- 最小二乘法
- 【技术问题】重装系统:Dell机器装ubuntu12.0
- 阅读《代码整洁之道》
- python正则表达式将字符串切割成单词列表
- flexboxLayout的用法