![](/img/trans.png)
[英]Android - How to change the visibility of a widget of and show it in all items in recyclerView?
[英]How to change layout for all items in RecyclerView?
我有一个RecyclerView。 在适配器中,我有一个布尔标志来确定应该为所有项使用哪个布局:
public class MyAdapter extends RecyclerView.Adapter<MyHolder> {
private boolean mIsSecondModeEnabled;
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(mIsSecondModeEnabled ?
R.layout.layout_second_mode_item :
R.layout.layout_first_mode_item, parent, false);
return new MyHolder(view);
}
public void setModeEnabled(boolean enabled) {
mIsSecondModeEnabled = enabled;
notifyDataSetChanged();
}
}
此代码不能完全正常工作。 当我调用setModeEnabled(true)
一些项目显示layout_first_mode_item
布局。
怎么实现呢?
当已创建的ViewHolder
池中没有ViewHolder
时,将调用onCreateViewHolder()
。 在此回调中,您可以指定RecyclerView
为您创建的视图。
执行notifyDataSetChanged()
后,不一定会调用onCreateViewHolder()
notifyDataSetChanged()
。 而是触发onBindViewHolder()
。 这是您应该更新视图的地方。
覆盖getItemViewType()
并根据您的用例返回布局ID:
@Override
public int getItemViewType(final int position) {
return mIsSecondModeEnabled ? R.layout.my_layout_1 : R.layout.my_layout_2;
}
为这两个布局创建2个ViewHolder
类,并从onCreateViewHolder()
返回适当的ViewHolder
具体取决于onCreateViewHolder()
回调的viewType
参数。
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == R.layout.my_layout_1) {
// create FirstViewHolder
} else if (viewType == R.layout.my_layout_2) {
// create SecondViewHolder
}
// return created ViewHolder
}
然后在onBindViewHolder()
回调中设置你的视图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.