【问题标题】:How to display progressbar while load data and fill into recyclerview?加载数据并填充到recyclerview时如何显示进度条?
【发布时间】:2018-02-12 17:22:33
【问题描述】:

我想在加载数据和加载完成时在活动中显示进度条,隐藏进度条(GONE)! 并尝试此代码:(单击按钮以加载数据)

private void allMoment() {
    BTN_ALL.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                TBL_MOMENT = new TableMoment(DB_HELPER);
             //   MOMENTS = TBL_MOMENT.MOMENT_LIST();
                new loadTask().execute();
                filterResult();
                EDT_SEARCH.setText("");
            } catch (Exception e) {
                displaySnackBar(v, "خطا:" + "\n" + e.toString());
            }
        }
    });
}

和任务方法:

private class loadTask extends AsyncTask<String, Integer, Boolean> {
    @Override
    protected void onPreExecute() {
        PROGRESS_LOADER.setVisibility(View.VISIBLE);
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Boolean result) {
        PROGRESS_LOADER.setVisibility(View.GONE);
        adapter.notifyDataSetChanged();
        super.onPostExecute(result);
    }

    @Override
    protected Boolean doInBackground(String... params) {
        MOMENTS = TBL_MOMENT.MOMENT_LIST();
        try {
            Thread.sleep(3000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

并用适配器填充回收器:

private void filterResult() {
    try {
        adapter = new HistoryAdapter(this, MOMENTS);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(adapter);
    } catch (Exception e) {
        displayToast(this, "خطای آداپتر:" + "\n" + e.toString());
    }
}

但是数据被加载并填充到recyclerview中并且不显示进度条 如何解决这个问题?

【问题讨论】:

    标签: android progress-bar loaddata


    【解决方案1】:

    你有:

     new loadTask().execute();
     filterResult();
     EDT_SEARCH.setText("");
    

    execute() 调用会立即返回,如果您执行 AsyncTask 等待结果,直到AsyncTask.doInBackground() 返回并调用AsyncTask.onPostExecuted() 才会有结果

    这是filterResult(); 耗时吗? ...如果主 UI 线程被阻塞,则 UI 将不会更新。

    【讨论】:

    • "这个 filterResult(); 耗时吗?"是的......我想在加载数据时,用户看到进度条
    • 如果 filterResult();阻塞 UI 线程 ProgressBar 不会显示或更新,您应该在单独的线程中运行 filterResult()。
    【解决方案2】:

    您希望此进度条如何工作?您可以在 Internet 上搜索 gif,一旦找到符合您条件的 gif,您必须在打开活动时显示它。当您填充您的 recyclerView 时,您将 gif 的可见性设置为 GONE。

    【讨论】:

      猜你喜欢
      • 2020-12-12
      • 1970-01-01
      • 2021-05-07
      • 2014-02-27
      • 2014-07-27
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多