2017-01-04 10 views
1

это мой пользовательский список вид класса whem я scroling вниз списка наш взгляд это будет кнопка выбора радиоRadio Group в обычае адаптер в виде списка в прокрутке значение происходит бесконтрольно

private String[] question_name; 
private String[] op11, op22, op33, op44; 
private Activity context; 
RadioGroup rg=null; 
private HashMap<Integer,String>selectitem=new HashMap<>(); 

public QustionAdapter(Activity context, String[] queation, String[] op1, String[] op2, 
         String[] op3, String[] op4) { 
    super(context, R.layout.qustion_custom_list, queation); 
    this.context = context; 
    this.question_name = queation; 
    this.op11 = op1; 
    this.op22 = op2; 
    this.op33 = op3; 
    this.op44 = op4; 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{ 
    LayoutInflater inflater = context.getLayoutInflater(); 

    View listViewItem = inflater.inflate(R.layout.qustion_custom_list, null, false); 

    TextView questionname=(TextView)listViewItem.findViewById(R.id.qustion_tb); 
    RadioButton op1=(RadioButton)listViewItem.findViewById(R.id.op1); 
    RadioButton op2=(RadioButton)listViewItem.findViewById(R.id.op2); 
    RadioButton op3=(RadioButton)listViewItem.findViewById(R.id.op3); 
    RadioButton op4=(RadioButton)listViewItem.findViewById(R.id.op4); 
    rg=(RadioGroup) listViewItem.findViewById(R.id.radio_group); 


    // Toast.makeText(context,"Done :"+rg.getCheckedRadioButtonId(),Toast.LENGTH_LONG).show(); 
    rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      Model model=new Model(); 

      RadioButton rb=(RadioButton) group.findViewById(checkedId); 
      // Toast.makeText(context,"Done :"+rb.getText(),Toast.LENGTH_LONG).show(); 
      String sel=rb.getText().toString(); 
      selectitem.put(position,sel); 
      model.setSelectResult(selectitem); 
     } 
    }); 


    questionname.setText(question_name[position]); 
    op1.setText(op11[position]); 
    op2.setText(op22[position]); 
    op3.setText(op33[position]); 
    op4.setText(op44[position]); 

    return listViewItem; 
}' 

непроверенных уборных, когда я выбираю первую группу радио нажмите его, а затем прокрутите его, когда я вернусь в группу радио, его гонка не установлена.

+0

вы должны сохранить проверили или нет в списке. –

+0

yes be beose its going unselected после прокрутки –

+0

Для этого вы должны использовать класс POJO, который будет содержать вопросы, опции и отмечен. Обновление проверено на проверенном прослушивателе изменений. –

ответ

1

здесь мы идем

public class CurrentAffairs extends AppCompatActivity { 
    public static int correct, wrong, marks; 
    DbH db; 
    ArrayList<Question> mcqs; 
    Cursor cur; 
    ListView lv; 
    CustomAdapter c; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.current_affairs); 

     //casting 
     lv = (ListView) findViewById(R.id.lv); 
     mcqs = new ArrayList<>(); 


    enter code here 
     try { 
      db = new DbH(this); 
     } catch (IOException e2) { 

      e2.printStackTrace(); 
     } 

     try { 
      db.createdatabase(); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 

     db.opendatabase(); 
     cur = db.data(); 

     try { 

      while (cur.moveToNext()) { 
       String mcqss = cur.getString(1); 
       String opta = cur.getString(2); 
       String optb = cur.getString(3); 
       String optc = cur.getString(4); 
       String optd = cur.getString(5); 
       String answ = cur.getString(6); 

       //put data in a listview 
       Question question = new Question(); 
       question.question = mcqss; 
       question.option1 = opta; 
       question.option2 = optb; 
       question.option3 = optc; 
       question.option4 = optd; 
       question.correctanxer = answ; 
       mcqs.add(question); 



       c = new CustomAdapter(CurrentAffairs.this, R.layout.row, R.id.mcqsText, mcqs); 
       lv.setAdapter(c); 


      } 
     } finally { 
      cur.close(); 
     } 
     Button btnshow = (Button) findViewById(R.id.btnshowresult); 
     btnshow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       StringBuffer sb = new StringBuffer(); 
       sb.append("Correct Answer = " + " " + correct); 
       sb.append(" " + "Wrong Answer = " + " " + wrong); 
       sb.append(" " + "Final Score = " + " " + correct * 5); 

       Toast.makeText(CurrentAffairs.this, sb, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 



    class CustomAdapter extends ArrayAdapter<Question> { 

     public CustomAdapter(Context context, int resource, int textViewResourceId, ArrayList<Question> objects) { 
      super(context, resource, textViewResourceId, objects); 


     } 

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

      LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View v = inflater.inflate(R.layout.row, parent, false); 
      TextView mcqsText = (TextView) v.findViewById(R.id.mcqsText); 
      TextView ans2 = (TextView) v.findViewById(R.id.answer2); 
      TextView anss = (TextView) v.findViewById(R.id.answer); 
      RadioGroup rg = (RadioGroup) v.findViewById(R.id.radioGroup); 

      RadioButton opt1 = (RadioButton) v.findViewById(R.id.optA); 
      RadioButton opt2 = (RadioButton) v.findViewById(R.id.optB); 
      RadioButton opt3 = (RadioButton) v.findViewById(R.id.optC); 
      RadioButton opt4 = (RadioButton) v.findViewById(R.id.optD); 

      Question question = mcqs.get(position); 

      mcqsText.setText(question.question); 
      opt1.setText(question.option1); 
      opt2.setText(question.option2); 
      opt3.setText(question.option3); 
      opt4.setText(question.option4); 
      anss.setText(question.selectedanxer); 
      ans2.setText("Correct answer is = " + question.correctanxer); 

      String test=opt1.getText().toString(); 
      String test2=question.selectedanxer+""; 

      if (test.equals(""+test2)){ 
       opt1.setChecked(true); 
      } 
      if (test2.equals(opt2.getText()+"")){ 
       opt2.setChecked(true); 
      } 
      if (test2.equals(opt3.getText()+"")){ 
       opt3.setChecked(true); 
      } 
      if (test2.equals(opt4.getText()+"")){ 
       opt4.setChecked(true); 
      } 




      rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(RadioGroup group, int checkedId) { 


        Question question1=mcqs.get(position); 
        RadioButton radioButton= (RadioButton) group.findViewById(checkedId); 
        mcqs.get(position).selectedanxer=radioButton.getText().toString(); 
        notifyDataSetChanged(); 



       } 
      }); 

      return v; 
     } 
    } 

    public class Question { 
     String question; 
     String option1; 
     String option2; 
     String option3; 
     String option4; 

     String selectedanxer; 
     String correctanxer; 

    } 

} 
1

Вы должны работать с классом модели всего объекта, имеющего логическое значение для истинного false для проверки и снятия флажка, и установить метод getter и setter и получить доступ к значению в методе get view(), или не отмечен, и установить значение для представления.

 @Override 
     public void onBindViewHolder(final MyViewHolder holder, final inposition)    {  
     final int pos = position; 
     holder.title.setText(list.get(pos).getName()); 
     if (islongpressed) 
     { 
      holder.checkBox.setVisibility(View.VISIBLE); 
     } 
     else holder.checkBox.setVisibility(View.GONE); 

     holder.checkBox.setChecked(list.get(pos).isSelected()); 


try { 
    holder.checkBox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      CheckBox cb = (CheckBox) v; 

      AudioFile contact =list.get(pos); 

      contact.setSelected(cb.isChecked()); 

      list.get(pos).setSelected(cb.isChecked()); 

     } 
    }); 


} 
+0

, пожалуйста, можете отправить код –

+0

Я отредактировал это сообщение. может это поможет вам –