如何更新ListView项中的进度栏

麦克风

我有一个ListView附件ArrayAdapter当用户单击某项中的某项的下载按钮时,ListView下载开始使用DownloadManager

我要做的是使用进度条(放置在项目布局中)跟踪下载进度。如何做到这一点?

Pocket Cast做到的方式完全就是我所追求的:

袖珍演员表pelpel http://www.mrcrab.net/images/thumb_big/9982-Pocket_Casts_Apk_v4.3.2_Android-0.jpg

注意:我知道如何使用DownloadManager,这是进度条的即时更新非常棘手。

麦克风

这就是我最终解决它的方式(经过多次迭代和不同的实现)。这有点棘手,但基本上您需要三件事:

  1. 一个收集元数据的AsyncTask
  2. 滚动侦听器,告诉我们用户何时停止滚动/翻转
  3. 一种聪明的算法,可找到需要更新的任何可见行,并要求适配器仅更新该特定行

这是我设计和实现的方式:

屏幕截图

我在这里对此进行了更详细的介绍,请参阅github代码以获取完整的实现。

    private class UpdaterAsyncTask extends AsyncTask<Void, Void, Void> {

    boolean isRunning = true;

    public void stop() {
        isRunning = false;
    }

    @Override
    protected Void doInBackground(Void... params) {

        while (isRunning) {

            // Gather data about your adapter objects
            // If an object has changed, mark it as dirty                

            publishProgress();

            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(Void... params) {
        super.onProgressUpdate();

        // Update only when we're not scrolling, and only for visible views
        if (mScrollState == OnScrollListener.SCROLL_STATE_IDLE) {
            int start = mListview.getFirstVisiblePosition();
            for(int i = start, j = mListview.getLastVisiblePosition(); i<=j; i++) {
                View view = mListview.getChildAt(i-start);
                if (((Content)mListview.getItemAtPosition(i)).dirty) {
                    mListview.getAdapter().getView(i, view, mListview); // Tell the adapter to update this view
                }

            }
        }

      }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何更新引导进度栏。

来自分类Dev

如何从SwingWorker中的方法更新进度栏

来自分类Dev

如何返回任务并用于更新javafx中的进度栏

来自分类Dev

如何逐步更新进度栏?

来自分类Dev

搜索栏进度更新

来自分类Dev

搜索栏进度更新

来自分类Dev

如何在updatePanel中不更新Listview项评估字段?

来自分类Dev

如何在mplayer中显示进度栏?

来自分类Dev

WPF:ListView中的进度栏未垂直对齐

来自分类Dev

ListView onItemClick水平进度栏

来自分类Dev

加载ListView期间的进度栏

来自分类Dev

如何在UWP中设置任务栏进度栏

来自分类Dev

如何在操作栏中添加进度栏图标?

来自分类Dev

如何在长循环中更新进度栏?

来自分类Dev

asp.net进度栏中的Jquery Ajax调用更新

来自分类Dev

WPF中的进度栏

来自分类Dev

DataGrid中的进度栏

来自分类Dev

ActionBar中的进度栏

来自分类Dev

updateb中的进度栏

来自分类Dev

进度栏不会立即更新

来自分类Dev

进度栏更新崩溃javaFX

来自分类Dev

AngularJs更新Bootstrap进度栏

来自分类Dev

Primefaces进度栏未更新

来自分类Dev

进度栏更新崩溃javaFX

来自分类Dev

Primefaces进度栏未更新?

来自分类Dev

如何在 ListView 项中添加 ListView

来自分类Dev

如何在范围搜索栏中设置进度间隔

来自分类Dev

如何在Bootstrap 3进度栏中居中显示文本?

来自分类Dev

如何在Bootstrap 3中为进度栏设置动画?