有没有办法重新绘制RecyclerView
的所有项目?
我有一些主题(在style.xml中),在更改主题后,我需要重新绘制RecyclerView
。
所以我想要一个强制为适配器的每个项目重新调用onCreateViewHolder
的方法。
我试图:
adapter.notifyDataSetChanged
但onCreateViewHolder
未被称为recyclerView.setVisibility(View.GONE)
,然后致电recyclerView.setVisibility(View.VISIBLE)
recyclerView.invalidate()
recyclerView.setAdapter(null)
,然后致电recyclerView.setAdapter(adapter)
这适用于90%的项目。只有90%的商品会获得新款式,但有些商品会采用旧款式我提到RecyclerView
附加到一个活动,而不是一个片段。
答案 0 :(得分:21)
我找到了答案! 正确的方法是:
recyclerView.setAdapter(null);
recyclerView.setLayoutManager(null);
recyclerView.setAdapter(myAdapter);
recyclerView.setLayoutManager(myLayoutManager);
myAdapter.notifyDataSetChanged();
之后,所有项目都获得新风格!
答案 1 :(得分:8)
如果要强制重绘,则需要清除RecycleView
的查看池。您可以使用recyclerView.getRecycledViewPool().clear();
答案 2 :(得分:8)
只需重新设置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
}
答案 3 :(得分:5)
以下代码行为我提供了诀窍
Install Package
答案 4 :(得分:4)
重置适配器为我工作,我在onConfigChange
内称呼它
myRecyclerView.setAdapter(myAdapter)
答案 5 :(得分:2)
在亚马逊Fire HD上唯一适合我的解决方案是:
recyclerView.setAdapter(null);
recyclerView.setLayoutManager(null);
recyclerView.getRecycledViewPool().clear();
recyclerView.swapAdapter(myAdapter, false);
recyclerView.setLayoutManager(layoutManager);
myAdapter.notifyDataSetChanged();
希望它有所帮助!
答案 6 :(得分:1)
看一下这个答案:https://stackoverflow.com/a/33342314/4142087
很快,您可以创建不同类型的视图持有者,更改视图类型将强制RecyclerView将另一个private void StartTimer()
{
var timer = new TimerCustom(5);
timer.TimeElapsed += (s, t) => ValueOfTimer = t;
timer.StartAsync(() => {
TakePicture();
});
}
传递给ViewHolder
。
如果您使用onBindViewHolder
,则必须重新创建整个活动,如下所示:https://stackoverflow.com/a/14367214/4142087
答案 7 :(得分:0)
我知道这已经很老了,但是我有一种情况,我需要在notifyDataSetChanged()
之后更改视图的类型。如果适配器已经有数据,则由于recycleviewadapter的“回收”部分未调用onCreateViewHolder
,因此在onBindViewHolder
中引发了类型转换错误。
我能够通过在适配器上调用myRecyclerView.getLayoutManager().removeAllViews();
之前先调用notifyDataSetChanged();
来解决此问题。
答案 8 :(得分:0)
强制将RecyclerView设置为onCreateViewHolder或重画其项目#Kotlin
这对我有用?
chown -R myuser:myuser 10.160.16.3
希望这可以帮助
答案 9 :(得分:0)
在尝试了这里的大部分想法之后 - 如果结果证明我的问题在于使用模拟器。在设备上进行测试时,我没有遇到任何问题。