在Recycler视图上是否有一种方法等待代码生效,然后再调用“ notify”方法(例如,notifyItemRangeInserted)?

时间:2019-05-10 01:00:55

标签: android-recyclerview

每当回收者视图开始加载更多项目时,我想在我的应用程序中显示进度对话框屏幕。问题是:由于无法在显示加载屏幕之前始终执行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方法(使加载屏幕无用)

1 个答案:

答案 0 :(得分:0)

您尝试过发布可运行方法吗?

progressbar.setvisibility(view.visible);
      progressbar.post(new Runnable() {
                @Override
                public void run() {
                    fetchMoreDataInTheRecyclerView();
                }
            });

*现在在fetchMoreDataInTheRecyclerView();内部进行提取,一旦完成,只需使进度条不可见即可。 让我知道是否有帮助。