Подтвердить что ты не робот

SwipeRefreshLayout запускается программно

Есть ли способ запустить программный код SwipeRefreshLayout? Анимация должна начинаться, и метод onRefresh из интерфейса OnRefreshListener должен быть вызван.

4b9b3361

Ответ 1

если вы используете новый swipeRefreshLayout, встроенный в 5.0 enter image description here

В качестве изображения, показанного выше, вам просто нужно добавить следующую строку, чтобы программный макет обновления прокрутки

 mSwipeRefreshLayout.post(new Runnable() {
        @Override
        public void run() {
            mSwipeRefreshLayout.setRefreshing(true);
        }
    });

если вы просто вызываете

 mSwipeRefreshLayout.setRefreshing(true);

он не активирует круг для анимации, поэтому, добавив вышеприведенную строку u, просто задерживайте поток пользовательского интерфейса, чтобы он отображал анимацию окружения внутри нити ui.

Вызывая mSwipeRefreshLayout.setRefreshing(true), OnRefreshListener будет НЕ выполняться

Чтобы остановить круговой анимационный вызов вызова mSwipeRefreshLayout.setRefreshing(false)

Ответ 2

Чтобы запустить SwipeRefreshLayout, я пробовал это решение:

SwipeRefreshLayout.OnRefreshListener swipeRefreshListner = new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            Log.i(TAG, "onRefresh called from SwipeRefreshLayout");
            // This method performs the actual data-refresh operation.
            // The method calls setRefreshing(false) when it finished.
            loadData();
        }
    };

Теперь:

swipeLayout.post(new Runnable() {
@Override public void run() {
     swipeLayout.setRefreshing(true);
     // directly call onRefresh() method 
     swipeRefreshListner.onRefresh();
   }
});

Ответ 3

Просто для того, чтобы добавить это два к объявляемому жестом салфетки

swipeRefreshLayout.setOnRefreshListener(
    new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            Log.i(TAG, "onRefresh called from SwipeRefreshLayout");

            // This method performs the actual data-refresh operation.
            // The method calls setRefreshing(false) when it finished.
            FetchData();
        }
    }
);

Ответ 4

Вы можете вызвать метод onRefresh() программно, а затем внутри метода запустить анимацию, если она еще не запущена. См. Следующее:

@Override
public void onRefresh() {
    if (!mSwipeRefreshLayout.isRefreshing()) mSwipeRefreshLayout.setRefreshing(true);
    //TODO
}