RecyclerView与不同的Cardlayouts

时间:2015-01-23 12:34:09

标签: android android-recyclerview android-cardview recycler-adapter

我想做什么


目前我正在玩RecyclerViewCardView。现在我写了一个RecyclerView.Adapter,我可以用不同的内容多次显示相同的CardView - 类似于ListViewBaseAdapter

现在我想用不同的RecyclerView来编写CardView-Layout(以Google Now的风格)。我已经搜索过教程,但没有发现有关该主题的任何有用信息。有人知道,这需要如何实施?要实现这一目标需要做些什么?

1 个答案:

答案 0 :(得分:18)

要实现您的目标,您需要覆盖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, 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;
}