web-dev-qa-db-ja.com

SwipeRefreshLayoutトリガーはプログラムで

プログラムでSwipeRefreshLayoutをトリガーする方法はありますか?アニメーションが開始され、onRefreshインターフェイスからのOnRefreshListenerメソッドが呼び出されます。

57
Niklas

5.0で導入された新しいswipeRefreshLayoutを使用している場合 enter image description here

上記の画像のように、次の行を追加するだけで、プログラムでスワイプ更新レイアウトをトリガーできます。

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

単に電話する場合

_ mSwipeRefreshLayout.setRefreshing(true);
_

円のアニメーションをトリガーしないため、上記の行uを追加することでUIスレッドに遅延を加えて、UIスレッド内に円のアニメーションを表示します。

mSwipeRefreshLayout.setRefreshing(true)を呼び出すことにより、OnRefreshListener実行されないになります

循環読み込みアニメーションを停止するには、mSwipeRefreshLayout.setRefreshing(false)を呼び出します

131
Ramz

トリガー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();
   }
});
24
Min2

スワイプジェスチャーを有効にするためにこの2つを追加することを強制するだけです

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

OnRefresh()メソッドをプログラムで呼び出して、メソッド内でアニメーションを開始できます(まだ開始されていない場合)。以下を参照してください。

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