SwipeRefreshLayout 以编程方式触发

2022-08-31 14:39:00

有没有办法以编程方式触发?动画应该开始,并且应该调用接口中的方法。SwipeRefreshLayoutonRefreshOnRefreshListener


答案 1

如果您使用的是 5.0 中引入的新 swipeRefreshLayoutenter image description here

如上图所示,您只需添加以下行即可以编程方式触发滑动刷新布局

工作

在爪哇语中:

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

在 Kotlin 中:

mSwipeRefreshLayout.post { mSwipeRefreshLayout.isRefreshing = true }

不工作

如果您只是简单地在Java中调用:

 mSwipeRefreshLayout.setRefreshing(true);

或在 Kotlin 中

 mSwipeRefreshLayout.isRefreshing = true

它不会触发圆圈进行动画处理,因此通过添加上面的行,只需在UI线程中延迟,以便它在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's finished.
            loadData();
        }
    };

现在关键部分:

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

推荐