每当回收者视图开始加载更多项目时,我想在我的应用程序中显示进度对话框屏幕。问题是:由于无法在显示加载屏幕之前始终执行notify方法(并冻结屏幕),因此无法显示对话框屏幕。即使在我的“ addContacts()”方法的第一行中调用了“ show()”方法,也会发生这种情况。
我已经尝试过:
getActivity()。runOnUiThread();
创建一个线程,启动它,调用join()
从执行者开始
public void addContactsToScreen() {
((BaseActivity) lcf.getActivity()).showProgressDialog();
try {
int currentSize = contactsLoaded.size();
int inserted;
for (inserted = 0;
inserted < DEFAULT_ITEM_INSERTION
&& inserted < lcf.getController().getContacts().size()
&& contactsLoaded.size() < lcf.getController().getContacts().size()
; inserted++) {
contactsLoaded.add(lcf.getController().getContacts().get(currentSize + inserted));
}
if (inserted > 0) {
notifyItemRangeInserted(contactsLoaded.size() - 1, inserted);
}
lcf.getContactsRecycler().getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
lcf.isLoading=false;
lcf.getContactsRecycler().post(new Runnable() {
@Override
public void run() {
((BaseActivity) lcf.getActivity()).hideProgressDialog();
}
});
lcf.getContactsRecycler().getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
那是原始代码(无线程或失败尝试)。每当我初始化适配器或视图达到阈值限制时,就会调用void。它加载一个列表,该列表最终在调用“ notifyItemRangeInserted()”之后显示在屏幕上。如您所见,“非常第一行”试图显示加载屏幕,但是由于某种原因,在调试器本身中,我发现带有断点的方法调用了show方法,但是加载屏幕从不出现,将列表填充为“ for”循环,调用notify事件,屏幕冻结,然后最终显示加载屏幕,但随后立即调用hide方法(使加载屏幕无用)
答案 0 :(得分:0)
您尝试过发布可运行方法吗?
progressbar.setvisibility(view.visible);
progressbar.post(new Runnable() {
@Override
public void run() {
fetchMoreDataInTheRecyclerView();
}
});
*现在在fetchMoreDataInTheRecyclerView();
内部进行提取,一旦完成,只需使进度条不可见即可。
让我知道是否有帮助。