Колесо обновления зависает до завершения onRefresh ()

Когда я смахиваю вверх, чтобы обновить свой ListView, я выполняю щелчок с помощью performClick (), но колесо зависает до тех пор, пока не будет выполнено все, что находится под onClickListener.

btini.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View v) {

            //Code here
            refreshlistmain.setRefreshing(false);

refreshlistmain.setOnRefreshListener(
                    new SwipeRefreshLayout.OnRefreshListener() {
                        @Override
                        public void onRefresh() {
                            btini.performClick();
                        }
                    }
            );

Поскольку код onClick () довольно длинный, колесо остается замороженным на пару секунд, прежде чем исчезнет.

Как мне это исправить?

1
0
273
2

Ответы 2

Это неправильное расположение кода. Это рекурсивный вызов. При каждом щелчке будет регистрироваться новый SwipeRefreshLayout.OnRefreshListener. Просто используйте его, как показано ниже. Выполните длительную задачу и, наконец, позвоните в refreshlistmain.setRefreshing(false);. Если длительная задача находится в рабочем потоке, вам нужно дождаться ее завершения.

btini.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
         // Do stuff
            refreshlistmain.setRefreshing(false);
        }
    });
    refreshlistmain.setOnRefreshListener(
            new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    btini.performClick();
                }
            }
    );

спасибо за ответ но у меня все еще есть проблема

Francesco 27.05.2018 16:32

Это потому, что у вас есть длинная задача в потоке пользовательского интерфейса. Он не заморозит не только SwipeToRefreshLayout, но и любую анимацию или ProgressBar, которые у вас есть (есть).

Решение

Поместите свою задачу (которую вы выполняете после нажатия кнопки) в AsyncTask или другом потоке. Что будет работать асинхронно.

Другие вопросы по теме