8

で使用android.support.v4.widget.SwipeRefreshLayoutしていandroid.support.v7.widget.RecyclerViewます。
フラグメント ビューの作成時に、SwipeRefreshLayoutアニメーションを表示する必要があります。しかし、私が電話してsetRefreshing(true)も何も起こりません。しかし、データを更新するとアニメーションが変わります。
child が入っていないとアニメーションが表示されないと思いますSwipeRefreshLayout
このアニメーションを最適な方法で表示するにはどうすればよいですか?

4

5 に答える 5

10

これは報告されたバグ (ここで報告) であり、回避策が利用可能です。

mSwipeRefreshLayout.setProgressViewOffset(false, 0,
    (int) TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP, 
        24, 
        getResources().getDisplayMetrics()));
mSwipeRefreshLayout.setRefreshing(true);
于 2014-11-05T17:59:16.160 に答える
2

ビルドしている API レベルによって異なります。API 20 までを使用している場合は、setRefreshing(true) をオンにするだけで、ActionBar でアニメーションが実行されますが、API 21 (Material Design) では回転する前に「ビューに引き込まれる」よりも、進行状況をスピナーに変更しました

API 21 でこれを回避するには 2 つの方法があります: 1) setProgressViewOffset() でスピナーを下にシフトしますが、後から元に戻すことを忘れないでください (これは px で機能し、setDistanceToTriggerSync() は dp を使用することに注意してください) 2)データを読み込んでいるときに表示される複製スピナー

コード効率の高い解決策は、既存のスピナーを使用することですが、その位置をリセットすることに注意する必要があります

ピクセル密度を計算する必要がある場合は、次から取得できます。

DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
float scale = metrics.density;
于 2014-10-29T20:44:55.657 に答える
1

SwipeRefreshLayout が正しく機能するには、子が含まれている必要があります。どこでも使用する前に、必ず初期化してください。

于 2014-10-21T18:02:07.180 に答える
0

setRefreshing(true)の後に呼び出す必要がありますonDraw()。そうしないと、アニメーションが表示されません。

したがって、Activity では、次のように で実行できますonCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // other codes

    new Handler().post(new Runnable() {
        @Override
        public void run() {
            swipeRefreshLayout.setRefreshing(true);
            refreshing = true;
            refreshData();
        }
    }
}

フラグメントでは、これらのコードを に入れることができますonActivityCreated()

于 2015-11-15T07:53:20.807 に答える