我想做什么
目前我正在玩RecyclerView和CardView.现在我写了一个RecyclerView.Adapter,我可以使用不同的内容多次显示相同的CardView – 与使用BaseAdapter的ListView类似.
现在我想用不同的CardView-Layout(以Google Now的风格)编写一个RecyclerView.我已经搜索了教程,但没有发现关于该主题的任何有用的东西.有人知道,这需要如何实施?需要做些什么来实现呢?
解决方法
要实现你想要的,你需要覆盖你的RecyclerView.Adapter
getItemViewType(position)
,在哪里你会返回一个int告诉你什么样的视图将用于表示这个位置.
接下来,您将在createViewHolder (parent,viewType)
上创建不同的ViewHolders,它将在您的情况下保留对每个不同CardLayout的引用.
然后在bindViewHolder(holder,position)
,您可以创建一个switch语句,否则的话可以通过您的可能视图列表并填写数据.
以下示例代码:
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,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; }