如何更改 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
为您创建的视图。
onCreateViewHolder()
不一定会在你执行完notifyDataSetChanged()
之后调用。相反 onBindViewHolder()
将被触发。这是您应该更新视图的地方。
根据您的用例覆盖 getItemViewType()
和 return 布局 ID:
@Override
public int getItemViewType(final int position) {
return mIsSecondModeEnabled ? R.layout.my_layout_1 : R.layout.my_layout_2;
}
为这两个布局创建 2 ViewHolder
类 并从 onCreateViewHolder()
return 适当 ViewHolder
取决于 viewType
参数 onCreateViewHolder()
回调。
@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()
回调中设置您的视图。
我有一个 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
为您创建的视图。
onCreateViewHolder()
不一定会在你执行完notifyDataSetChanged()
之后调用。相反 onBindViewHolder()
将被触发。这是您应该更新视图的地方。
根据您的用例覆盖 getItemViewType()
和 return 布局 ID:
@Override
public int getItemViewType(final int position) {
return mIsSecondModeEnabled ? R.layout.my_layout_1 : R.layout.my_layout_2;
}
为这两个布局创建 2 ViewHolder
类 并从 onCreateViewHolder()
return 适当 ViewHolder
取决于 viewType
参数 onCreateViewHolder()
回调。
@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()
回调中设置您的视图。