我有一个列表视图的适配器,显示问题列表。每个问题都有答案选项,可选中复选框或单选按钮,也可选择带图像和答案选项。答案选项的数量因问题类型而异,例如,1个问题可能有2个单选按钮答案选项,而另一些问题可能有4个复选框答案选项以及图像视图。一个问题不能同时具有复选框和单选按钮作为答案选项。
如何实施此类要求?我是否需要在问题中使用嵌套的适配器和问题中的另一个适配器?我能够通过动态和编程方式在适配器的getView()内创建视图来实现我的问题答案。但事实是,我无法为每个答案选项重用已创建的答案选项视图。它总是为每个选项创建答案视图,这需要花费大量时间来向用户呈现和显示数据。
如果我的方法正确,如何优化我的解决方案? 谢谢。
// optionsList包含每个问题的答案选项。所以我循环创建每个视图。
for (int opt = 0; opt < optionsList.size(); opt++) {
addOptionsView(opt, optionsList.get(opt), position);
}
//The above for loop will be for each question
(在一行中,我有两个水平线性布局,一个用于答案图像和答案文本,第二个用于CheckBox或RadioButton):
//Each answer option
final LinearLayout optionRow = new LinearLayout(getContext());//Parent
//For image or answer text
final LinearLayout imageOrText = new LinearLayout(getContext());//Child1
//For radio or checkbox
final LinearLayout radioOrCheckbox = new LinearLayout(getContext());//Child2
//add image when option has an image
if (mData.get(questionNo).getOptionImages().size() > 0) {
//create ImageView here
imageOrText.addView(optionImage);
}
TextView mOptionName = new TextView(getContext());
mOptionName.setText(optionName);//Here create answer option and set the text on it.
imageOrText.addView(mOptionName);
optionRow.addView(imageOrText);
radioOrCheckbox.addView(optionCheckType);//Check type is either CheckBox or RadioButton
optionRow.addView(radioOrCheckbox); // Finally add above two layout in parent view.
//something more like this
viewHolder.txtQuestion.setText(mData.get(position).getQuestion());
//Here view holder class
private class ViewHolder {
TextView txtQuestion;
LinearLayout llQuestionLayout;
public ViewHolder(View view) {
txtQuestion = (TextView) view.findViewById(R.id.questionValue);
llQuestionLayout = (LinearLayout)view.findViewById(R.id.questionLayout);
}
}
注意: 在上面的代码片段中没有重复使用每个答案选项视图的代码,因此,在为每个答案选项动态创建答案视图时,渲染数据需要时间。
答案 0 :(得分:0)
您可以对两个列表使用Recyclerview。为每个recyclerviews创建一个适配器。单个回收站视图将处理视图的可重用性。 我找到了一篇文章,可以方便你获得这个概念 https://dannysu.com/2015/10/11/list-in-list-in-list/。嵌套回收器视图是避免在ui层上使用内存的更好方法,因为它处理视图的创建。