具有不同卡片布局的 RecyclerView
RecyclerView with different Cardlayouts
我想做什么
目前我正在研究 RecyclerView
和 CardView
。现在我写了一个 RecyclerView.Adapter
,我可以在上面多次显示相同的 CardView 不同的内容 - 类似于 ListView
和 BaseAdapter
.
现在我想用不同的 CardView-Layout
写一个 RecyclerView
(现在 Google 的风格)。我已经搜索过教程,但没有找到任何关于该主题的有用信息。有人知道,这需要如何实施?需要做什么才能实现这一点?
要实现您想要的效果,您需要覆盖 RecyclerView.Adapter
上的 getItemViewType(position)
,您将 return 和 int
告诉您哪种视图用来表示这个位置。
接下来您将在 createViewHolder (parent,viewType)
上创建不同的 ViewHolders
,这将在您的案例中保留对每个不同 CardLayout 的引用。
然后在 bindViewHolder(holder, position)
上,您可以创建一个 switch 语句或 if else case 来遍历可能的视图列表并用数据填充它们。
示例代码如下:
public GeneralViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
GeneralViewHolder holder;
View v;
Context context = viewGroup.getContext();
if (viewType == FIRST_TYPE) {
v = LayoutInflater.from(context)
.inflate(R.layout.first_card, viewGroup, false);
holder = new FirstTypeViewHolder(v); //Of type GeneralViewHolder
} else {
v = LayoutInflater.from(context)
.inflate(R.layout.second_card, viewGroup, false);
holder = new SecondTypeViewHolder(v);
}
return holder;
}
public void onBindViewHolder(GeneralViewHolder viewHolder, int i) {
if(getItemViewType(i)==FIRST_TYPE) {
FirstTypeViewHolder holder1 = (FirstTypeViewHolder)viewHolder;
} else {
SecondTypeViewHolder holder1 = (SecondTypeViewHolder)viewHolder;
}
}
public int getItemViewType (int position) {
//Some logic to know which type will come next;
return Math.random()<0.5 ? FIRST_TYPE : SECOND_TYPE;
}
我想做什么
目前我正在研究 RecyclerView
和 CardView
。现在我写了一个 RecyclerView.Adapter
,我可以在上面多次显示相同的 CardView 不同的内容 - 类似于 ListView
和 BaseAdapter
.
现在我想用不同的 CardView-Layout
写一个 RecyclerView
(现在 Google 的风格)。我已经搜索过教程,但没有找到任何关于该主题的有用信息。有人知道,这需要如何实施?需要做什么才能实现这一点?
要实现您想要的效果,您需要覆盖 RecyclerView.Adapter
上的 getItemViewType(position)
,您将 return 和 int
告诉您哪种视图用来表示这个位置。
接下来您将在 createViewHolder (parent,viewType)
上创建不同的 ViewHolders
,这将在您的案例中保留对每个不同 CardLayout 的引用。
然后在 bindViewHolder(holder, position)
上,您可以创建一个 switch 语句或 if else case 来遍历可能的视图列表并用数据填充它们。
示例代码如下:
public GeneralViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
GeneralViewHolder holder;
View v;
Context context = viewGroup.getContext();
if (viewType == FIRST_TYPE) {
v = LayoutInflater.from(context)
.inflate(R.layout.first_card, viewGroup, false);
holder = new FirstTypeViewHolder(v); //Of type GeneralViewHolder
} else {
v = LayoutInflater.from(context)
.inflate(R.layout.second_card, viewGroup, false);
holder = new SecondTypeViewHolder(v);
}
return holder;
}
public void onBindViewHolder(GeneralViewHolder viewHolder, int i) {
if(getItemViewType(i)==FIRST_TYPE) {
FirstTypeViewHolder holder1 = (FirstTypeViewHolder)viewHolder;
} else {
SecondTypeViewHolder holder1 = (SecondTypeViewHolder)viewHolder;
}
}
public int getItemViewType (int position) {
//Some logic to know which type will come next;
return Math.random()<0.5 ? FIRST_TYPE : SECOND_TYPE;
}