2015-10-30 1 views
2

Как выКак получить положение динамически добавленных флажков и кнопок радио в качестве позиции дочерних позиций Listview?

  1. Добавить CheckBox динамически в getView()?
  2. набора текст для CheckBox эсов с различными подсчетами ...

    В объяснении ...

В Listview

  • Вопрос 1 Потребность 5 флажки
  • Вопроса 2 требуется 7 флажков
  • Вопрос 3 требует 3 флажка
  • Вопрос 4 потребности 8 флажки

Это то, что я хочу, и я использовал код ...

@SuppressWarnings("deprecation") 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 

      view = mLayoutInflater.inflate(R.layout.question_items, null); 
      final TextView question_number = (TextView) view.findViewById(R.id.qno_text); 
      final TextView question = (TextView) view.findViewById(R.id.qstn_text); 
      LinearLayout linear_layout = (LinearLayout) view.findViewById(R.id.linear_vertical); 

      question_number.setText(question_items.get(position).getQuestionNo()); 
      question.setText(question_items.get(position).getQuestion()); 
      String single_or_multiple = question_items.get(position).getSingleSelect(); 

    if(single_or_multiple.equals("0")) { 

     final ArrayList<String> answer_check_box = new ArrayList<>(); 
     final ArrayList<String> questions = new ArrayList<>(); 
     final ArrayList<String> questions_in_ques_and_ans = new ArrayList<>(); 
     final ArrayList<String> questions_and_checking = new ArrayList<>(); 

     checkBoxState = new boolean[question_items.get(position).getOptionList().size()]; 
     final int check_size = question_items.get(position).getOptionList().size(); 
     Log.d("Size", String.valueOf(check_size)); 

     for(int i = 0; i<question_items.get(position).getOptionList().size(); i++) { 

      check_box = new CheckBox(context); 
      check_box.setGravity(Gravity.CENTER); 
      check_box.setBackgroundDrawable(getApplication().getResources().getDrawable(R.drawable.fifth_username)); 
      check_box.setPadding(8, 8, 8, 8); 
      check_box.setText(question_items.get(position).getOptionList().get(i).getOPTIONS()); 
      LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 
      params.setMargins(10, 10, 10, 10); 
      check_box.setLayoutParams(params); 
      check_box.setId(i); 
      check_box.setTag(i); 
      check_box.setChecked(false); 

      check_box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        int id = buttonView.getId(); 
        Log.d("ID", String.valueOf(id)); 

        tag_val = (int) buttonView.getTag(); 
        String tag_value = String.valueOf(tag_val); 
        Log.d("TAG", tag_value); 

        Question_Number = question_number.getText().toString(); 
        Question = question.getText().toString(); 
        String value = ""; 
          if(isChecked) { 
           value = question_items.get(position).getOptionList().get(id).getOPTIONS(); 
            Log.d("checkbox checked value", value); 
           answer_check_box.add(value); 
           if(questions.size() > 0) { 
              if(questions.contains(Question)) { 
               questions.remove(Question); 
               questions.add(Question); 
               } else { 
                questions.add(Question); 
               } 
             } else { 
              questions.add(Question); 
             } 
           Log.d("Answers Checked", answer_check_box.toString()); 
           Log.d("Question Checked", questions.toString()); 
           Answer = answer_check_box.toString(); 
            }else { 
           value = question_items.get(position).getOptionList().get(id).getOPTIONS(); 
           Log.d("checkbox Unchecked value", value); 
            answer_check_box.remove(value); 
            if(answer_check_box.size() > 0) { 
              } else { 
              questions.remove(Question); 
             } 

           Log.d("Answers Unchecked", answer_check_box.toString()); 
           Log.d("Question UnChecked", questions.toString()); 
           Answer = answer_check_box.toString(); 
             } 

          if(questions_and_checking.size() > 0) { 
           Log.d("Size","above 1"); 

           for(int check = 0; check < questions_and_checking.size(); check++) { 
            questions_in_ques_and_ans.add(questions_and_checking.get(check)); 
             } 
           Log.d("Questions check", questions_in_ques_and_ans.toString()); 
           Log.d("Que array", ques_and_ans.toString()); 

           if(questions_in_ques_and_ans.contains(Question)) { 

            Log.d("Contains","Que"); 
            int index = ques_and_ans.indexOf(ques_and_ans.get(position)); 
            Log.d("Index", String.valueOf(index)); 
            ques_and_ans.remove(index); 

            Question_and_Answer item = new Question_and_Answer(); 
            item.setQustionNumber(Question_Number); 
            item.setQuestionTitle(Question); 
            item.setOptionValue(Answer); 
            ques_and_ans.add(item); 
            questions_and_checking.add(Question); 

            } else { 
             Log.d("Not Contains","Que"); 
             Question_and_Answer item = new Question_and_Answer(); 
             item.setQustionNumber(Question_Number); 
             item.setQuestionTitle(Question); 
             item.setOptionValue(Answer); 
             ques_and_ans.add(item); 
             questions_and_checking.add(Question); 
             } 
          } else { 
           Log.d("Size", "0"); 
            Question_and_Answer item = new Question_and_Answer(); 
            item.setQustionNumber(Question_Number); 
            item.setQuestionTitle(Question); 
            item.setOptionValue(Answer); 
            ques_and_ans.add(item); 
            questions_and_checking.add(Question); 
           Log.d("Check After First add", ques_and_ans.toString()); 
           } 
          } 
         }); 
      linear_layout.addView(check_box); 
      } 


     } else { 
        radio_group = new RadioGroup(context); 
       for(int i=0; i<question_items.get(position).getOptionList().size(); i++) { 
        radio_button = new RadioButton(context); 
        radio_button.setGravity(Gravity.CENTER); 
        radio_button.setBackgroundDrawable(getApplication().getResources().getDrawable(R.drawable.fifth_username)); 
        radio_button.setPadding(8, 8, 8, 8); 
        radio_button.setText(question_items.get(position).getOptionList().get(i).getOPTIONS()); 
        LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 
        params.setMargins(10, 10, 10, 10); 
        radio_button.setLayoutParams(params); 
        radio_group.addView(radio_button); 
          } 
       linear_layout.addView(radio_group); 

       radio_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
        @Override 
        public void onCheckedChanged(RadioGroup rgp, int checkedId) { 
         Question_Number =question_number.getText().toString(); 
         Question = question.getText().toString(); 

         radioButtonID = radio_group.getCheckedRadioButtonId(); 
         View radioButton = radio_group.findViewById(radioButtonID); 
         idx = radio_group.indexOfChild(radioButton); 
         Log.d("id", String.valueOf(idx)); 

         String answer = question_items.get(position).getOptionList().get(idx).getOPTIONS(); 
         Toast.makeText(getApplicationContext(), answer, 2).show(); 
         Answer = answer; 

         Question_and_Answer item = new Question_and_Answer(); 
         item.setQustionNumber(Question_Number); 
         Log.d("Q_no", Question_Number); 
         item.setQuestionTitle(Question); 
         Log.d("Qstn", Question); 
         item.setOptionValue(Answer); 
         Log.d("Answer", Answer); 
         ques_and_ans.add(item); 
           } 
          }); 
         } 
        return view; 
         } 

Я не могу иметь возможность получить флажки и радиокнопки позиции ... Потому что, когда я прокручиваю его, он автоматически отключается. Я знаю, что это свойство getView, но как я могу управлять им с помощью этого кода ...

+0

Здесь я использовал Textview, но позже я его поменяю. –

+0

Если у вас всегда есть 4 вопроса, просто используйте ScrollView. –

+1

Нет г-на Явада, у меня «нет» вопросов ... Но варианты ответов на вопросы разные. –

ответ

0

set Текст для CheckBoxes с разным счетом?

Каждый CheckBox имеет setText() -Функция, который можно вызвать с желаемым текстом.

Активировать функцию CheckBox в getView?

ViewHolder содержит LinearLayout. Предполагая, что вы хотите, чтобы заполнить, что с CheckBox эс, вы должны быть в состоянии

CheckBox cb = new CheckBox(this); 
cb.setText("some text"); 
linear_layout.addView(cb); 

для каждого CheckBox вы желаете добавить. Вы также можете запросить set a onCheckedChangeListener, чтобы получать уведомления о том, что пользователь проверяет CheckBox.

Возможно, есть более простой подход, чем добавление этих элементов в getView()?

Но проблема в том, что преобразование не работает. Потому что у моих третьих и четвертых вопросов есть 3 и 8 вариантов соответственно. Но это показывает только 5 вариантов ...

Предполагая, что количество флажков в question_items.get(position).getQuestionNo(), вы должны быть в состоянии сделать

for (int i = 0; i < question_items.get(position).getQuestionNo(); i++) { 
    //code to add a single checkbox 
} 

и если вы хотите следовать @Jawad's approach about setting the visibility, вы могли бы сделать это в цикле, а также.

+0

Да, пользователь. Я не делаю этого вместо Textview выше. Но проблема в том, что конвертировать представление не работает. Потому что у моих третьих и четвертых вопросов есть 3 и 8 вариантов соответственно. Но это показывает только 5 вариантов ... –

+0

Я думаю, что с таким подходом, если у вас есть вопрос с меньшим количеством флажков, чем в предыдущем конвертере, вам нужно будет удалить их из-за перекомпоновки просмотра. –

+0

@kabildev: посмотрите, подходит ли обновление –

 Смежные вопросы

  • Нет связанных вопросов^_^