【发布时间】:2015-12-14 12:17:25
【问题描述】:
在我的应用程序中,我在 RecyclerView 的帮助下显示了 20 个多项选择题。
如果我更改第一个 RadioGroup 的值并向下滚动,再次向上滚动删除 RecycelarView 中的选定值,并且我想进一步使用选定的 RadioButton 值,我也检查了 link1 但是我不明白他在做什么。
这是我的示例代码 sn-p 如果您需要任何说明,请告诉我。
package com.testing.survey;
import java.util.List;
import android.annotation.SuppressLint;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
@SuppressWarnings("rawtypes")
public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
private List<Student> stList;
public DataAdapter(List<Student> students) {
this.stList = students;
}
// Create new views
@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new view
View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
R.layout.list_row, null);
// create ViewHolder
ViewHolder viewHolder = new ViewHolder(itemLayoutView);
return viewHolder;
}
@SuppressLint("UseValueOf") @Override
public void onBindViewHolder(ViewHolder viewHolder,int position) {
final int pos = position;
viewHolder.tvQuestionNumber.setText(stList.get(position).getQuestionNumber());
viewHolder.tvQuestion.setText(stList.get(position).getQuestion());
viewHolder.rbAns1.setText(stList.get(position).getAnswer1());
viewHolder.rbAns2.setText(stList.get(position).getAnswer2());
viewHolder.rbAns3.setText(stList.get(position).getAnswer3());
viewHolder.rbAns4.setText(stList.get(position).getAnswer4());
viewHolder.rbAns5.setText(stList.get(position).getAnswer4());
//viewHolder.rgAnswers.clearCheck();
viewHolder.rgAnswers.check(stList.get(position).getSelectedRadioButtonId());
viewHolder.rgAnswers.setTag(new Integer(position));
Log.v("select"+position,stList.get(position).getSelectedRadioButtonId()+"");
viewHolder.rgAnswers.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
int radioButtonID = group.getCheckedRadioButtonId();
View radioButton = group.findViewById(radioButtonID);
int clickedPos = ((Integer)group.getTag()).intValue();
//Student contact=(Student)group.getTag();
//contact.setSelectedRadioButtonId(radioButtonID);
stList.get(clickedPos).setSelectedRadioButtonId(radioButtonID);
Log.v("hello"+clickedPos,stList.get(clickedPos).getSelectedRadioButtonId()+"");
}
});
}
// Return the size arraylist
@Override
public int getItemCount() {
return stList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView tvQuestionNumber;
public TextView tvQuestion;
public RadioGroup rgAnswers;
public RadioButton rbAns1,rbAns2,rbAns3,rbAns4,rbAns5;
public Student singlestudent;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
tvQuestionNumber = (TextView) itemLayoutView.findViewById(R.id.tvQuestionNumber);
tvQuestion = (TextView) itemLayoutView.findViewById(R.id.tvQuestion);
rgAnswers=(RadioGroup)itemLayoutView.findViewById(R.id.rgAnswers);
rbAns1=(RadioButton)itemLayoutView.findViewById(R.id.rbAnswer1);
rbAns2=(RadioButton)itemLayoutView.findViewById(R.id.rbAnswer2);
rbAns3=(RadioButton)itemLayoutView.findViewById(R.id.rbAnswer3);
rbAns4=(RadioButton)itemLayoutView.findViewById(R.id.rbAnswer4);
rbAns5=(RadioButton)itemLayoutView.findViewById(R.id.rbAnswer5);
}
}
// method to access in activity after updating selection
public List<Student> getStudentist() {
return stList;
}
}
【问题讨论】:
-
类似这样的事情,如果您选择第一个单选按钮,它会在您向下滚动时自动选择另一个单选按钮。对吗?
-
是的,你能帮忙解决一下吗
-
我没有使用 RecyclerView 但我已经使用 setTag 和 getTag 实现了 ViewHolders
-
我已经更改了我的代码,你能再看看并建议我解决方案
-
在
viewHolder.rgAnswers.setOnCheckedChangeListener...之后移动viewHolder.rgAnswers.check...有帮助吗?
标签: android android-recyclerview