如何在加载数据并填充到recyclerview时显示进度条?
How to display progressbar while load data and fill into recyclerview?
我想在加载数据时在 activity 中显示进度条,加载完成后隐藏进度条(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;
}
}
并用 dapter 填充回收器:
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 中并且不显示进度条
如何解决这个问题?
您有:
new loadTask().execute();
filterResult();
EDT_SEARCH.setText("");
此 execute()
立即调用 returns,如果您执行 AsyncTask 等待结果,则直到 AsyncTask.doInBackground()
returns 和 AsyncTask.onPostExecuted()
被称为
这 filterResult();
很费时间吗? ...如果主 UI 线程被阻塞,那么 UI 将不会更新。
您希望这个进度条如何工作?您可以在 Internet 上搜索 gif,一旦找到适合您条件的 gif,您必须在打开 activity 时显示它。当您填充 recyclerView 时,您将 gif 的可见性设置为 GONE。
我想在加载数据时在 activity 中显示进度条,加载完成后隐藏进度条(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;
}
}
并用 dapter 填充回收器:
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 中并且不显示进度条 如何解决这个问题?
您有:
new loadTask().execute();
filterResult();
EDT_SEARCH.setText("");
此 execute()
立即调用 returns,如果您执行 AsyncTask 等待结果,则直到 AsyncTask.doInBackground()
returns 和 AsyncTask.onPostExecuted()
被称为
这 filterResult();
很费时间吗? ...如果主 UI 线程被阻塞,那么 UI 将不会更新。
您希望这个进度条如何工作?您可以在 Internet 上搜索 gif,一旦找到适合您条件的 gif,您必须在打开 activity 时显示它。当您填充 recyclerView 时,您将 gif 的可见性设置为 GONE。