RecyclerView
のすべてのアイテムを再描画する方法はありますか?
テーマがいくつか(style.xmlに)あり、テーマを変更した後、RecyclerView
を再描画する必要があります。
したがって、アダプタの各アイテムに対してonCreateViewHolder
を強制的に再呼び出しするメソッドが必要です。
私がしようとしました:
adapter.notifyDataSetChanged
_を呼び出しますが、onCreateViewHolder
は呼び出されませんrecyclerView.setVisibility(View.GONE)
を呼び出してからrecyclerView.setVisibility(View.VISIBLE)
を呼び出しますrecyclerView.invalidate()
を呼び出しますrecyclerView.setAdapter(null)
を呼び出してからrecyclerView.setAdapter(adapter)
を呼び出します。RecyclerView
は、フラグメントではなく、アクティビティに添付されることに言及します。
答えが見つかりました!これを行う正しい方法は次のとおりです。
recyclerView.setAdapter(null);
recyclerView.setLayoutManager(null);
recyclerView.setAdapter(myAdapter);
recyclerView.setLayoutManager(myLayoutManager);
myAdapter.notifyDataSetChanged();
その後、すべてのアイテムが新しいスタイルになります!
Recyclerviewのアダプターを再度設定するだけでうまくいきました(RecyclerViewですべてのアイテムのレイアウトを再描画したかったのです)
/**
* Forces RecyclerView adapter to call createViewHolder() - i.e. redraw all all items' layouts
*/
private fun resetAdapterState() {
val myAdapter = recyclerView.adapter
recyclerView.adapter = myAdapter
}
再描画を強制する場合は、RecycleView
のビュープールをクリアする必要があります。 recyclerView.getRecycledViewPool().clear();
を使用できます
以下のコード行は私のためにトリックをしました
recyclerview.swapAdapter(myAdapter,false);
recyclerview.setLayoutManager(myLayoutManager);
myAdapter.notifyDataSetChanged();
Amazon Fire HDで私のために働いた唯一のソリューションはこれでした:
recyclerView.setAdapter(null);
recyclerView.setLayoutManager(null);
recyclerView.getRecycledViewPool().clear();
recyclerView.swapAdapter(myAdapter, false);
recyclerView.setLayoutManager(layoutManager);
myAdapter.notifyDataSetChanged();
それが役に立てば幸い!
この答えを見てください: https://stackoverflow.com/a/33342314/4142087
まもなく、異なるタイプのビューホルダーを作成できます。ビュータイプを変更すると、RecyclerViewは別のViewHolder
をonBindViewHolder
に強制的に渡します。
setTheme
を使用する場合、次のようにアクティビティ全体を再作成する必要があります。 https://stackoverflow.com/a/14367214/4142087