Android ListView с ArrayAdapter, заменяющим компоненты элемента списка - PullRequest
1 голос
/ 21 марта 2019

Пожалуйста, проверьте последнее обновление ниже, поскольку я нашел проблему, но не знаю, как ее исправить

[Обновление: ссылка для скачивания проекта] , котораяочень маленький, это всего лишь пример и добавлен класс вопросов

Я создаю ListView с ArrayAdapter для теста.каждый вопрос имеет 3 ответа в виде переключателей.Проблема в том, что когда я прокручиваю вниз или снова вверх, он заменяет ответы на первый вопрос ответами на другой вопрос, который был скрыт свитком, и заменяет ответы на скрытый вопрос ответами на первый вопрос.

Так скажемУ меня есть вопрос 1 с 3 ответами: 1, 2 и 3, и у меня есть вопрос 5, который является первым скрытым вопросом с тремя ответами 10,11 и 12. Когда я прокручиваю вниз, чтобы просмотреть вопрос 5, я обнаруживаю, что его ответы 1,2 и3 затем, когда я прокручиваю вверх, я обнаруживаю, что у этого вопроса есть ответы на вопрос 5: 10,11 и 12. Почему это происходит и как это исправить?Вот адаптер

public class QuestionsAdapter extends ArrayAdapter<Questions> {

public QuestionsAdapter(Activity context, ArrayList<Questions> questions) {
    super(context, 0, questions);
}

@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View listItemView = convertView;
    if (listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
    }
        //styling odd and even items
        if (position % 2 == 1) {
            listItemView.setBackgroundColor(getContext().getResources().getColor(R.color.odd));
        } else {
            listItemView.setBackgroundColor(getContext().getResources().getColor(R.color.even));
        }

        //used ViewHolder to prevent triggering position null issue
        // final because it'll be used inside onClick
        final ViewHolder viewHolder = new ViewHolder();

        try {
            final Questions currentQuestion = getItem(position);

            viewHolder.questionTextView = (TextView) listItemView.findViewById(R.id.q_text);
            viewHolder.questionTextView.setText(currentQuestion.getmQuestionTitle());

            viewHolder.radioGroup = (RadioGroup) listItemView.findViewById(R.id.q_answers);

            viewHolder.firstAnswer = (RadioButton) listItemView.findViewById(R.id.q_option1);

           //MainActivity.answerIdis set to 0 and use it to set different id for each radio to find it inside onClick
           viewHolder.firstAnswer.setText(currentQuestion.getQuestionAnswer1());
            viewHolder.firstAnswer.setId(MainActivity.answerId);
          //increading MainActivity.answerId by 1
            MainActivity.answerId +=1;

            viewHolder.secondAnswer = (RadioButton) listItemView.findViewById(R.id.q_option2);
            viewHolder.secondAnswer.setText(currentQuestion.getQuestionAnswer2());
            viewHolder.secondAnswer.setId(MainActivity.answerId);
            MainActivity.answerId +=1;

            viewHolder.thirdAnswer = (RadioButton) listItemView.findViewById(R.id.q_option3);
            viewHolder.thirdAnswer.setText(currentQuestion.getQuestionAnswer3());
            viewHolder.thirdAnswer.setId(MainActivity.answerId);
            MainActivity.answerId +=1;

            final TextView resultTextView = (TextView) listItemView.findViewById(R.id.result_text);


        } catch (Exception e) {
            e.printStackTrace();
        }

    return listItemView;
}

  private class ViewHolder {
    TextView questionTextView;
    RadioGroup radioGroup;
    RadioButton firstAnswer, secondAnswer,thirdAnswer;
  }
}

Класс вопросов:

public class Questions {

  private String mQuestionTitle,mQuestionAnswer1, mQuestionAnswer2, mQuestionAnswer3, mCorrect ;

  public Questions(String questionTitle, String questionAnswer1, String questionAnswer2, String questionAnswer3,
                 String correct){
    mQuestionTitle = questionTitle;
    mQuestionAnswer1 = questionAnswer1;
    mQuestionAnswer2 = questionAnswer2;
    mQuestionAnswer3 = questionAnswer3;
    mCorrect = correct;
  }

  public String getQuestionTitle(){
    return mQuestionTitle;
  }

  public String getQuestionAnswer1(){
    return mQuestionAnswer1;
  }

  public String getQuestionAnswer2(){
    return mQuestionAnswer2;
  }

  public String getQuestionAnswer3(){
    return mQuestionAnswer3;
  }

  public String getCorrect(){
    return mCorrect;
  }

}

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

String question = currentQuestion.getQuestionTitle();
String option_1 = currentQuestion.getQuestionAnswer1();
String option_2 = currentQuestion.getQuestionAnswer2();
String option_3 = currentQuestion.getQuestionAnswer3();
viewHolder.questionTextView = (TextView) listItemView.findViewById(R.id.q_text);
viewHolder.questionTextView.setText(question);
viewHolder.radioGroup = (RadioGroup) listItemView.findViewById(R.id.q_answers);
viewHolder.firstAnswer = (RadioButton) listItemView.findViewById(R.id.q_option1);
viewHolder.firstAnswer.setText(option_1 + ":" + question);
viewHolder.firstAnswer.setId(MainActivity.answerId);
MainActivity.answerId +=1;

enter image description here

Реальная проблема здесь , когда я устанавливаю idответить, он возвращается к 0 и начинает увеличивать его на 1, а при повторной прокрутке снова возвращается к 0.Как сохранить последнее целочисленное значение и увеличивать его, чтобы установить различные идентификаторы для радиокнопок?

Снимки экрана

opening the app I find the correct answers for the first question

After scrolling the the first hidden question I find that its answers has been replaced by the first question answers

scrolling up again and I find that the first question answers has been replaced by question 5 answers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...