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

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

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 жеста

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