簡體   English   中英

如何在 notifyDataSetChanged 上為 recyclerView 設置動畫?

[英]How to animate recyclerView on notifyDataSetChanged?

我有一個 recyclerview,它是一個文件夾列表。 當我單擊一個項目時,該文件夾內的文件夾/文件是新列表。 我想玩滑出舊列表並滑入新列表的animation。 它應該看起來像進入或離開目錄。

我已經這樣實現了:

// rv : RecyclerView

rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_out_to_left))
adapter.list = list
rv.notifyDataSetChanged()
rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_right))

但是只有后面的 animation 顯示?

我唯一能想到的是 notifyDataSetChanged() 非常具有破壞性,它可能會在您的 animation 開始之前被調用。

我的建議是延遲

adapter.list = list
rv.notifyDataSetChanged()
rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_right))

直到

rv.startAnimation(AnimationUtils.loadAnimation(context,R.anim.slide_out_to_left))

有足夠的時間運行。 這是上一個答案的鏈接,該鏈接顯示了如何設置 onAnimationFinished 偵聽器,該偵聽器應偵聽第一個 animation 完成。 在 Android 的 RecyclerView 中檢測 animation 完成

Animation animation = AnimationUtils.loadAnimation(getContext(),R.anim.slide_out_to_left);
        animation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) { }
            @Override
            public void onAnimationEnd(Animation animation) {
              adapter.list = list;
              adapter.notifyDataSetChanged();
              rv.startAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_right));
            }
            @Override
            public void onAnimationRepeat(Animation animation) {}
        });
rv.startAnimation(animation));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM