У меня есть проблема, и это то, что, показывая список с несколькими RadioButton и отмечая их, при переходе через них они отмечаются и не отмечаются без критериев.
Я ищу, но не могу найти решение, я оставляю свой код на случай, если кто-то может мне помочь, и заранее, большое спасибо.
Как вы можете видеть, он использует базу данных Sqlite, но это не проблема, проблема заключается в ListView, что при спуске экрана что-то работает неправильно.
Я тестировал различные проблемы, но ни одна из них не работает, я застрял.
адаптер:
public abstract class AdaptadorRespuestas extends BaseAdapter {
private ArrayList<Respuestas> respuestas;
private Context context;
private int R_layout_idView;
private RadioButton selected = null;
public AdaptadorRespuestas(ArrayList<Respuestas> respuestas, Context context, int r_layout_idView) {
super();
this.respuestas = respuestas;
this.context = context;
this.R_layout_idView = r_layout_idView;
}
@Override
public int getCount() {
return respuestas.size();
}
@Override
public Object getItem(int position) {
return respuestas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if(convertView == null){
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R_layout_idView, null);
holder = new ViewHolder();
holder.pregunta = (TextView) convertView.findViewById(R.id.textViewPreguntaDetalle);
holder.respuesta1 = (RadioButton) convertView.findViewById(R.id.radioButton);
holder.respuesta2 = (RadioButton) convertView.findViewById(R.id.radioButton2);
holder.respuesta3 = (RadioButton) convertView.findViewById(R.id.radioButton3);
holder.radioGroup = (RadioGroup) convertView.findViewById(R.id.radioGrupo);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
onEntrada(respuestas.get(position), convertView);
return convertView;
}
public abstract void onEntrada(Object respuesta, View view);
public static class ViewHolder{
private TextView pregunta;
private RadioButton respuesta1, respuesta2, respuesta3 ;
private RadioGroup radioGroup;
}
}
Модель:
публичный класс Respuestas {
private int id;
private String pregunta;
private String respuesta1;
private String respuesta2;
private String respuesta3;
public Respuestas(int id, String pregunta, String respuesta1, String respuesta2, String respuesta3) {
this.id = id;
this.pregunta = pregunta;
this.respuesta1 = respuesta1;
this.respuesta2 = respuesta2;
this.respuesta3 = respuesta3;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPregunta() {
return pregunta;
}
public void setPregunta(String pregunta) {
this.pregunta = pregunta;
}
public String getRespuesta1() {
return respuesta1;
}
public void setRespuesta1(String respuesta1) {
this.respuesta1 = respuesta1;
}
public String getRespuesta2() {
return respuesta2;
}
public void setRespuesta2(String respuesta2) {
this.respuesta2 = respuesta2;
}
public String getRespuesta3() {
return respuesta3;
}
public void setRespuesta3(String respuesta3) {
this.respuesta3 = respuesta3;
}
}
Активность:
открытый класс RespuestasActivity расширяет AppCompatActivity {
ListView listView;
private AdaptadorRespuestas adaptadorRespuestas;
private ArrayList<Respuestas> datos = new ArrayList<Respuestas>();
private int controlDeAccion = 0;
private Cursor cursor;
private int contador = 0;
TextView pregunta;
RadioButton respuesta1, respuesta2, respuesta3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_respuestas);
DBHelper dbHelper = new DBHelper(this);
SQLiteDatabase database = dbHelper.getReadableDatabase();
int idRecibido = getIntent().getIntExtra("ID", 0);
cursor = database.rawQuery(" SELECT * FROM " + QuestionQuotes.QuestionTabla.NOMBRE_TABLA +
" WHERE " + QuestionQuotes.QuestionTabla.IDTEST + " = " + idRecibido, null);
while (cursor.moveToNext()) {
contador++;
int id = cursor.getInt(cursor.getColumnIndex(QuestionQuotes.QuestionTabla._ID));
String pregunta = cursor.getString(cursor.getColumnIndex(QuestionQuotes.QuestionTabla.QUESTION));
String respuesta1 = cursor.getString(cursor.getColumnIndex(QuestionQuotes.QuestionTabla.ANSWER1));
String respuesta2 = cursor.getString(cursor.getColumnIndex(QuestionQuotes.QuestionTabla.ANSWER2));
String respuesta3 = cursor.getString(cursor.getColumnIndex(QuestionQuotes.QuestionTabla.ANSWER3));
datos.add(new Respuestas(id, pregunta, respuesta1, respuesta2, respuesta3));
}
listView = (ListView) findViewById(R.id.listViewRespuesta);
this.adaptadorRespuestas = new AdaptadorRespuestas(datos, this, R.layout.list_respuesta_details) {
@Override
public void onEntrada(Object respuesta, View view) {
TextView pregunta = (TextView) view.findViewById(R.id.textViewPreguntaDetalle);
pregunta.setText(((Respuestas) respuesta).getPregunta());
RadioButton boton1 = (RadioButton) view.findViewById(R.id.radioButton);
boton1.setText(((Respuestas) respuesta).getRespuesta1());
RadioButton boton2 = (RadioButton) view.findViewById(R.id.radioButton2);
boton2.setText(((Respuestas) respuesta).getRespuesta2());
RadioButton boton3 = (RadioButton) view.findViewById(R.id.radioButton3);
boton3.setText(((Respuestas) respuesta).getRespuesta3());
RadioButton boton4 = (RadioButton) view.findViewById(R.id.radioButtonBlanco);
boton4.setText("Dejar pregunta en blanco");
}
};
Button btnAddMore = new Button(this);
btnAddMore.setText("Corregir");
btnAddMore.setTextColor(Color.parseColor("#EDE7F6"));
btnAddMore.setBackgroundColor(Color.parseColor("#3949AB"));
listView.addFooterView(btnAddMore);
btnAddMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RespuestasActivity.this, MainActivity.class);
startActivity(intent);
}
});
listView.setAdapter(adaptadorRespuestas);
}
}
Обозначая радиопереключатели и глядя вниз, они не имеют маркировки или маркировки, без видимого смысла.