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