Триггер SwipeRefreshLayout программно


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

4 54

4 ответа:

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

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

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

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

 mSwipeRefreshLayout.setRefreshing(true);

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

по телефону mSwipeRefreshLayout.setRefreshing(true) в OnRefreshListener будет не выполнится

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

для того чтобы триггер 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's finished.
            loadData();
        }
    };

Теперь основная часть:

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

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

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

просто чтобы заставить добавить эти два к ennable swipe gesture

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's finished.
            FetchData();
        }
    }
);