您的位置:首页 > 其它

ListView中 局部刷新Item 实现下载进度条局部更新

2014-06-19 13:55 519 查看

问题引入:

demo中需做个下载个下载管理界面。同时只能下载一个任务,但是下载队列可以有多个下载任务。

当更新当前正在下载的任务的时候,使用 notifyDataSetChanged();方法会使整个页面都会刷新。

而且进度更新比较频繁,这就造成了内存的消耗和页面卡顿(在进度更新很频繁的情况),笔者甚至出现了卡住页面无法进行操作的情况。

所以想到了能不能局部刷新某个Item。也查了下资料,问题解决。

解决思路:

通过listview.getFirstVisiblePosition()方法获取到显示的item的首个位置 ,再根据position, 计算出view的位置。获取到具体的view后,对view进行操作,就能够实现局部刷新了。

关键代码:

public void updateView(int itemIndex) {  

        //得到第一个可显示控件的位置,  

        int visiblePosition = mListView.getFirstVisiblePosition();  

        //只有当要更新的view在可见的位置时才更新,不可见时,跳过不更新  

        if (itemIndex - visiblePosition >= 0) {  

            //得到要更新的item的view  

            View view = mListView.getChildAt(itemIndex - visiblePosition);  

            //从view中取得holder  

            ViewHolder holder = (ViewHolder) view.getTag();  

            HashMap<String, Object> item = data.get(itemIndex);  

            //获取到具体的控件,

            holder.name = (TextView) view.findViewById(R.id.name);  

            holder.process = (ProcessBar) view.findViewById(R.id.process);  

            .......

            //对控件进行操作

            holder.process.setMax(item.get("max"));

            holder.process.setProgress(item.get("progress"));

            ......

     

        }         

    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息