我想在[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。这是正确的吗?