为了实现你想要的,你需要重写getItemViewType(position) https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#getItemViewType%28int%29在你的RecyclerView.Adapter
,您将在其中返回int
告诉你将使用什么样的视图来表示这个立场。
接下来你将创建不同的ViewHolders
on createViewHolder (parent,viewType) https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#createViewHolder%28android.view.ViewGroup,%20int%29这将保留对您的案例中每个不同 CardLayout 的引用。
Then on bindViewHolder(holder, position) https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#bindViewHolder%28VH,%20int%29您可以创建一个 switch 语句或 if else 情况来浏览可能的视图列表并用数据填充它们。
示例代码如下:
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;
}