programing

프로그래밍 방식으로 SwipeRefreshLayout 트리거

nasanasas 2020. 12. 14. 08:26
반응형

프로그래밍 방식으로 SwipeRefreshLayout 트리거


SwipeRefreshLayout프로그래밍 방식으로 트리거하는 방법이 있습니까? 애니메이션이 시작되고 인터페이스 onRefresh메서드 OnRefreshListener가 호출되어야합니다.


5.0에서 도입 된 새로운 swipeRefreshLayout을 사용하는 경우 여기에 이미지 설명 입력

위에 표시된 이미지와 같이 프로그래밍 방식으로 스 와이프 새로 고침 레이아웃을 트리거하려면 다음 줄을 추가하면됩니다.

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

당신이 단순히 전화하면

 mSwipeRefreshLayout.setRefreshing(true);

원이 애니메이션되도록 트리거하지 않으므로 위의 줄 u를 추가하여 UI 스레드에서 지연을 만들어 ui 스레드 내부에 원 애니메이션을 표시합니다.

호출하여 됩니다 실행되지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
}

이 두 가지를 강요 할 수있는 스 와이프 제스처에 추가하기 위해

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

binding.swipeRefreshLayout.setRefreshing(true); // show loading 
binding.swipeRefreshLayout.post(this::updateUI); // call method
binding.swipeRefreshLayout.setOnRefreshListener(this::updateUI); // call method

참고 URL : https://stackoverflow.com/questions/24587925/swiperefreshlayout-trigger-programmatically

반응형