Есть ли способ подождать, пока код вступит в силу, прежде чем вызывать метод «уведомлять» (EG notifyItemRangeInserted) в представлении Recycler? - PullRequest
0 голосов
/ 10 мая 2019

Я хочу отображать диалоговое окно прогресса в моем приложении всякий раз, когда представление переработчика начинает загружать больше элементов.Проблема в том, что я не могу отобразить диалоговое окно, потому что метод уведомления ВСЕГДА выполняется (и замораживает экран) до появления экрана загрузки.Происходит, даже если метод show () для него вызывается в самой первой строке моего метода addContacts ().

Я уже пробовал:

  • 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();
    }
    

    }

Это оригинальный код (без потоков или неудачных попыток).Пустота вызывается каждый раз, когда я инициализирую адаптер или представление достигает порогового предела.Он загружает список, который отображается на экране после вызова «notifyItemRangeInserted ()».Как вы можете видеть, VERY FIRST LINE пытается показать экран загрузки, но по какой-то причине в самом отладчике я нахожу с точками останова, что метод вызывает метод show, но экран загрузки никогда не появляется, заполняет список в «for»цикл, вызывает событие уведомления, экран зависает, ТОГДА экран загрузки наконец появляется, но затем сразу же вызывается метод скрытия (делает экран загрузки бесполезным)

1 Ответ

0 голосов
/ 10 мая 2019

Вы пробовали запустить метод после запуска?

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

* Теперь выполните выборку внутри fetchMoreDataInTheRecyclerView(); и после этого просто сделайте прогрессбар невидимым.Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...