Listview 更新单个Item布局 和 listview.getLastVisiblePosition()=-1 问题的解决
来源:互联网 发布:学php以后可以做什么 编辑:程序博客网 时间:2024/06/10 16:51
- 遇到的一个问题 :项目中下载文件部分。在ListView 中单独更新一个进度条。
错误: 不能试用 adapter.notifyDataSetChanged(); 因为此方法会更新全部 ListView,很容易导致程序卡死,产生不好的用户体验。
正确:首先获取点击位置 ,在点击位置没有找过 ListView 的个数 之后,最重要的一步就是让点击位置 减去 ListView 在屏幕中显示的首个item的位置 ,因为:getChildAt ( int position ) 方法中position指的是当前可见区域的第几个元素。
详细代码:
private Handler downHandler = new Handler(){ public void handleMessage(Message msg) { if(clickPosition>=lvDownLoad.getFirstVisiblePosition() &&clickPosition <= lvDownLoad.getLastVisiblePosition()) { int positionInListView = clickPosition - lvDownLoad.getFirstVisiblePosition(); ProgressBar pb = (ProgressBar) lvDownLoad.getChildAt(positionInListView) .findViewById(R.id.pb_download); TextView tv = (TextView) lvDownLoad.getChildAt(positionInListView) .findViewById(R.id.tv_download_state); switch (msg.what) { case 0: // 设置最大 进度条 刻度 pb.setVisibility(View.VISIBLE); tv.setText("开始下载"); break; case 1: // 更新进度条 pb.setProgress((int)(downLoadFileSize/fileSize*100)); break; case 2: // 通知下载完成 pb.setVisibility(View.INVISIBLE); tv.setText("查看文件"); break; } } }; };
- 第一个问题解决后又发生了第二个问题(listview.getLastVisiblePosition()=-1的情况)
原因:由于ListView.getLastVisiblePosition() 方法的时候,ListView 并没有加载完成。
解决方法:通过ListView .Post(new Runnable()); 在Runnable 中进行代码的 更新。
代码:
lvDownLoad.post(new Runnable() { @Override public void run() { for(int i=0;i<files.size();i++){ if(i >= lvDownLoad.getFirstVisiblePosition() && i <= lvDownLoad.getLastVisiblePosition()){ int ii = i - lvDownLoad.getFirstVisiblePosition(); ProgressBar pb = (ProgressBar)lvDownLoad.getChildAt(ii) .findViewById(R.id.pb_download); TextView tv = (TextView) lvDownLoad.getChildAt(ii) .findViewById(R.id.tv_download_state); if(GetFileSizeUtil.fileIsExists( // 有相同文件 Environment.getExternalStorageDirectory().getPath() +"/zcdownloadFile/"+files.get(i).getFileName())){ pb.setVisibility(View.INVISIBLE); tv.setText("查看文件"); }else{ // 没有相同文件 pb.setVisibility(View.VISIBLE); tv.setText("点击下载"); } } } } });
0 0
- Listview 更新单个Item布局 和 listview.getLastVisiblePosition()=-1 问题的解决
- ListView更新单个item
- listView 更新单个item
- ListView 单个Item 更新
- ListView,GridView的getLastVisiblePosition()和getFirstVisiblePosition
- listview和recycleview的刷新单个item
- ListView的Item不可点击和Item布局重复问题
- ListView加载不同Item布局的问题
- ListView刷新单个item
- 修改ListView单个Item
- listview单个刷新item
- listView刷新单个Item
- ListView刷新单个Item
- ListView GridView 自定义ViewGroup的单个item 刷新 和 单个item中的局部元素刷新
- Android BaseAdapter和ViewHolder 优化 解决ListView的item抢焦点问题和item错乱问题
- 删除listview列表里面的单个item
- listview item的问题
- Android 解决ListView插入其他布局条目(item或广告)删掉数据的问题
- NoSQL:从关系型数据库到非关系型数据库
- 跨域请求:Fetch实现跨域请求与POST方式参数提交
- 122. Best Time to Buy and Sell Stock II(贪心)
- java实现的各种排序算法
- Git指令
- Listview 更新单个Item布局 和 listview.getLastVisiblePosition()=-1 问题的解决
- ConstraintLayout 的入门用法
- 机器学习简介
- 深入理解Java:注解(Annotation)自定义注解入门
- XML笔记-XMLHttpRequest对象
- 【信号处理】因果系统的理解
- mysql字段类型优化
- CoordinatorLayout之注意事项
- jQuery 效果 - 滑动