Проблемы с Listview, RadioGrup, RadioButton и ViewHolder - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть проблема, и это то, что, показывая список с несколькими 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);
}

}

Обозначая радиопереключатели и глядя вниз, они не имеют маркировки или маркировки, без видимого смысла.

...