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

RecyclerView.Adapter <RecyclerView.ViewHolder>

到目前为止一切正常 .

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

但这会导致糟糕的表现 .

所以我回来只使用一个RecyclerView和一个适配器 .

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

Update1:

这是我的当前和结果updated_screenshot . 到目前为止看起来"fine"但是没有以适当的方式实现 . 我做了如下:将一个适配器(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 . 这是正确的吗?