RecyclerView个别viewTypes

时间:2016-05-19 13:07:21

标签: android android-recyclerview

我想在[RecyclerView]中显示许多[CardViews]。 因此我正在使用扩展的适配器

  

RecyclerView.Adapter< RecyclerView.ViewHolder>

到目前为止一切正常。

但是现在,我希望以不同的顺序使用不同的小部件(复选框,文本视图,按钮......)填充CardView,具体取决于当前数据集位置的数据。由于有太多可能性,因此为窗口小部件顺序的每个可能组合定义ViewHolder类不是一个选项。 我用两个RecyclerView-Adapters管理它。一个用于RecyclerView“列表”,另一个用于在每个项目中填充CardView。

但这会导致糟糕的表现。

所以我回来只使用一个RecyclerView和一个Adapter。

但是,如何以一种好的方式填充每个CardView呢?谢谢你的帮助!

更新1:

这是我的当前和结果updated_screenshot。到目前为止看起来“很好”但是没有以适当的方式实现。 我做了如下: 将适配器(OuterAdapter)设置为recyclerView,它包含每个CardView:

public class OuterAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>  {
.
.
.
    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {

        rviewHolder = (RviewHolder) holder;
        llm = new LinearLayoutManager(context);
        rviewHolder.rv.setLayoutManager(llm);
        innerAdapter = new VHAdapter(context, questionList);
        rviewHolder.rv.setAdapter(innerAdapter);

    }
.
.
.
}

现在,每个Item都有自己的“VHAdapter”,它填充了CardViews,如:

@Override
public void onBindViewHolder(RecyclerView.ViewHolder h, final int position) {

    switch (h.getItemViewType()) {
        case ONLY_HEADER_TEXT:
            HeaderTextHolder holder = (HeaderTextHolder) h;
            holder.tv.setText(q.getText());
            break;

        case ANSWER_TYPE_NUMBER:
            NumberHolder nh = (NumberHolder) h;
            nh.tv.setText(q.getText());
            nh.et.setOnEditorActionListener(new TextView.OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

                    tempAnswer.setNumber(Integer.parseInt(v.getText().toString()));
                    tempAnswer.setQuestionType(Question.ANSWER_TYPE_NUMBER);
                    return false;
                }
            });
            break;
            .
            .
            .

我现在要做的是摆脱VHAdapter。但这意味着,我必须在OuterAdapter的onBindViewHolder上手动将小部件添加到ViewHolders rootLayout。这是正确的吗?

0 个答案:

没有答案