2016-01-14 1 views
-1

Мы работаем над проектом, в котором есть элемент списка с группой радио в каждом элементе списка. Кнопки радио в нем генерируются dynamically.The проблема в том, что на прокрутке состояние выбранных переключателей становится deselected.The Ниже приведен код, который мы постарались:Состояние динамических переключателей, переключающихся при прокрутке в списке Android

Адаптер GetView() метод:

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

       option_list = question_list_array.get(position).option_list; 
       number_of_options = option_list.size(); 

        v_single=convertView; 
        if (v_single == null) 
        { 
         v_single = inflater.inflate(R.layout.single_choice_layout, null); 
         sh = new SingleHolder(); 
         sh.single_question_name = (TextView) v_single.findViewById(R.id.single_question_name); 
         sh.single_radiogroup = (RadioGroup) v_single.findViewById(R.id.single_radiogroup); 
         v_single.setTag(sh); 
        } 
        else 
        { 
         sh = (SingleHolder) v_single.getTag(); 
        } 
        sh.single_radiogroup.clearCheck(); 
        sh.single_radiogroup.removeAllViews(); 
        sh.single_question_name.setText(question_list_array.get(position).getQuestion_name()); 
        for (int j = 0; j < number_of_options; j++) 
        { 
         RadioButton rb = new RadioButton(context); 
         rb.setId(Integer.parseInt(option_list.get(j).getOption_id())); 
         rb.setText(option_list.get(j).getOption_name()); 
         sh.single_radiogroup.addView(rb); 
        } 
        sh.single_radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
         @Override 
         public void onCheckedChanged(RadioGroup group, int checkedId) { 

          for (int n = 0; n < group.getChildCount(); n++) 
          { 
           RadioButton rb = (RadioButton) group.getChildAt(n); 
           if (Integer.parseInt(option_list.get(n).getOption_id())== checkedId) 
           { 
            k++; 
            String result = rb.getText().toString(); 
            sr=new SingleResult(); 
            sr.setAns(result); 
            sr.setQuestion_id(question_list_array.get(k).getQuestion_id()); 
            single_result.add(sr); 
            Toast.makeText(context, result, Toast.LENGTH_SHORT).show(); 
            return; 
           } 
          } 
         } 
        }); 
        v_final=v_single; 

    return v_final;   
    } 
private class SingleHolder 
    { 
     TextView single_question_name; 
     RadioGroup single_radiogroup; 


    } 

EDIT: это файл single_choice_layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:orientation="vertical" 
    > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/single_question_name" 
     /> 
    <RadioGroup 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/single_radiogroup" 
     android:orientation="vertical" 
     > 

    </RadioGroup> 


</LinearLayout> 
+0

@AnjaliTripathi. Наша проблема заключается не в изменении позиции кнопки Radio. Наша проблема заключается в изменении выбранного состояния переключателя при прокрутке. – jojo

+0

это то же самое, потому что мы используем радиокнопку в целом listview –

+0

, вероятно, вам также нужен ваш файл макета –

ответ

0

попробовать этот код

public View getView(final int position, View convertView, ViewGroup parent) { 

    //give the corrct class name 
    QuestionObj rowObject = question_list_array.get(position); 

    option_list = question_list_array.get(position).option_list; 
    number_of_options = option_list.size(); 

    v_single = convertView; 
    SingleHolder sh; 
    if (v_single == null) { 
     v_single = inflater.inflate(R.layout.single_choice_layout, null); 
     sh = new SingleHolder(); 
     sh.single_question_name = (TextView) v_single.findViewById(R.id.single_question_name); 
     sh.single_radiogroup = (RadioGroup) v_single.findViewById(R.id.single_radiogroup); 
     v_single.setTag(sh); 
    } else { 
     sh = (SingleHolder) v_single.getTag(); 
    } 

    sh.single_question_name.setText(rowObject.getQuestion_name()); 
    sh.single_radiogroup.clearCheck(); 
    sh.single_radiogroup.removeAllViews(); 

    for (int j = 0; j < number_of_options; j++) { 
     RadioButton rb = new RadioButton(context); 
     rb.setId(Integer.parseInt(option_list.get(j).getOption_id())); 
     rb.setText(option_list.get(j).getOption_name()); 
     sh.single_radiogroup.addView(rb); 
    } 

    if (rowObject.getSelectedId() != 0) { 

     RadioButton radioButton = (RadioButton) sh.single_radiogroup.findViewById(rowObject.getSelectedId()); 
     if (radioButton != null) 
      radioButton.setChecked(true); 
    } 
    sh.single_radiogroup.setTag(rowObject); 
    sh.single_radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 

      QuestionObj rowObject = (QuestionObj) group.getTag(); 
      rowObject.setSelectedId(checkedId); 
      RadioButton radioButton = (RadioButton) group.findViewById(checkedId); 
      rowObject.setAnswer(radioButton.getText()); 


     } 
    }); 
    v_final = v_single; 

    return v_final; 
} 

private class SingleHolder { 
    TextView single_question_name; 
    RadioGroup single_radiogroup; 
} 

class QuestionObj { 
    private int selectedId; 

    public int getSelectedId() { 
     return selectedId; 
    } 

    public void setSelectedId(int selectedId) { 
     this.selectedId = selectedId; 
    } 
    //put this is in those 
    //other fieldds like questionname, question id, 
} 
0

Если я понять ваш код правильно. Вам также необходимо реализовать этот метод.

check (int id) Устанавливает выбор для переключателя, идентификатор которого передается в параметре.

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