2015-04-05 48 views
1

我是新来的android和试图创建一个问题的列表视图,2种类型,mcq和true-false, 与一个问题textview和一个提交按钮有一个无线电组4个单选按钮,取决于问题的类型,我隐藏2个单选按钮,使它看起来像真假问题,一切都在这里工作正常... ...Android的收音机组里面的listview不能正常工作

问题出现,当我检查任何无线电按钮并向下滚动或向上滚动,该按钮不保留其状态,即使在存储了选择了哪个选项后,如果找到存储的选项,我检查单选按钮,但它不显示在UI中检查,而是显示在其他选项中显示问题或某时不同的单选按钮被检查。

这里是我的适配器代码

public class QuestionAdapter extends BaseAdapter 
{ 

    private ArrayList<QuestionsGetSet> data; 
    private Context acontext; 
    private LayoutInflater inflater; 
    private String TAG="QuestionAdapter"; 

    public QuestionAdapter(Context a, ArrayList<QuestionsGetSet> q) 
    { 
     acontext = a; 
     data = q; 
    } 

    @Override 
    public int getCount() 
    { 
     return data.size(); 
    } 

    @Override 
    public Object getItem(int arg0) 
    { 
     return data.get(arg0); 
    } 

    @Override 
    public long getItemId(int arg0) 
    { 
     return 0; 
    } 

    @Override 
    public View getView(int arg0, View arg1, ViewGroup arg2) 
    { 
     holder hv=null; 
     final int postion = arg0; 
     if (arg1 == null) 
     { 
      inflater = (LayoutInflater) acontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      arg1 = inflater.inflate(R.layout.question_feed, null); 

      hv = new holder(); 
      hv.question = (TextView) arg1.findViewById(R.id.question_content_tv); 
      hv.answer = (TextView) arg1.findViewById(R.id.question_answer_tv); 
      hv.id = (TextView) arg1.findViewById(R.id.question_id_tv); 
      hv.counter = (TextView) arg1.findViewById(R.id.question_counter_tv); 
      hv.r_goup = (RadioGroup) arg1.findViewById(R.id.question_radio_group); 
      hv.option1 = (RadioButton) arg1.findViewById(R.id.question_option_1); 
      hv.option2 = (RadioButton) arg1.findViewById(R.id.question_option_2); 
      hv.option3 = (RadioButton) arg1.findViewById(R.id.question_option_3); 
      hv.option4 = (RadioButton) arg1.findViewById(R.id.question_option_4); 
      hv.submit_btn = (Button) arg1.findViewById(R.id.question_submit_btn); 
      hv.r_goup.setOnCheckedChangeListener(new OnCheckedChangeListener() 
      { 

       @Override 
       public void onCheckedChanged(RadioGroup arg0, int arg1) 
       { 
        Log.d(TAG,"inside oncheckedchanged, position="+postion); 
        data.get(postion).set_ischecked(true); 
        switch (arg1) 
        { 
        case R.id.question_option_1: 
         Log.d(TAG,"Option 1 checked"); 
         data.get(postion).set_whichISchecked(1); 
         break; 
        case R.id.question_option_2: 
         Log.d(TAG,"Option 2 checked"); 
         data.get(postion).set_whichISchecked(2); 
         break; 
        case R.id.question_option_3: 
         Log.d(TAG,"Option 3 checked"); 
         data.get(postion).set_whichISchecked(3); 
         break; 
        case R.id.question_option_4: 
         Log.d(TAG,"Option 4 checked"); 
         data.get(postion).set_whichISchecked(4); 
         break; 
        } 
       } 
      }); 
      arg1.setTag(hv); 
     } 
     else 
     { 
      hv = (holder) arg1.getTag(); 
     } 

     QuestionsGetSet qgs = data.get(postion); 
     if(qgs.get_ischecked()) 
     { 
      Log.d(TAG,"inside if of is checked"); 
      int i=qgs.get_whichISchecked(); 
      Log.d(TAG,"inside if of is checked, which is check="+i); 
      switch(i) 
      { 
      case 1: 
       hv.option1.setChecked(true); 
       hv.option2.setChecked(false); 
       hv.option3.setChecked(false); 
       hv.option4.setChecked(false); 
       break; 
      case 2: 
       hv.option2.setChecked(true); 
       hv.option1.setChecked(false); 
       hv.option3.setChecked(false); 
       hv.option4.setChecked(false); 
       break; 
      case 3: 
       hv.option3.setChecked(true); 
       hv.option1.setChecked(false); 
       hv.option2.setChecked(false); 
       hv.option4.setChecked(false); 
       break; 
      case 4: 
       hv.option4.setChecked(true); 
       hv.option1.setChecked(false); 
       hv.option2.setChecked(false); 
       hv.option3.setChecked(false); 
       break; 
      } 
     } 
     else if(!qgs.get_ischecked()) 
     { 
      Log.d(TAG,"inside else of is checked"); 
      hv.option1.setChecked(false); 
      hv.option2.setChecked(false); 
      hv.option3.setChecked(false); 
      hv.option4.setChecked(false); 
     } 


     /*** below all code is working fine ***/ 

     /// used to create a true-false or mcq type ui, working fine 
     if (qgs.get_isBool()) 
     { 
      hv.option1.setText("True"); 
      hv.option2.setText("False"); 
      hv.option3.setVisibility(View.GONE); 
      hv.option4.setVisibility(View.GONE); 
     } else 
     { 
      hv.option1.setText(qgs.get_option_1()); 
      hv.option2.setText(qgs.get_option_2()); 
      hv.option3.setVisibility(View.VISIBLE); 
      hv.option4.setVisibility(View.VISIBLE); 
      hv.option3.setText(qgs.get_option_3()); 
      hv.option4.setText(qgs.get_option_4()); 
     } 
     /// used to check if question can be submitted or not, working fine 
     if (qgs.get_isvalid() != null) 
     { 
      if (!qgs.get_isvalid()) 
      { 
       hv.submit_btn.setText("Question Closed"); 
       hv.submit_btn.setBackgroundResource(R.drawable.btn_invalid); 
      } else 
      { 
       hv.submit_btn.setText("Submit"); 
       hv.submit_btn.setBackgroundResource(R.drawable.btn_valid); 
      } 
     } 
     /// used to check if answer is present, then showed to user, working fine 
     if (qgs.get_answer() != null) 
     { 
      hv.answer.setVisibility(View.VISIBLE); 
      hv.answer.setText(qgs.get_answer()); 
     } else 
     { 
      hv.answer.setVisibility(View.GONE); 
      hv.answer.setText(""); 
     } 
     hv.question.setText(qgs.get_question()); 
     hv.id.setText(qgs.get_id() + ""); 
     hv.counter.setText(qgs.get_counter() + ""); 

     return arg1; 
    } 

    class holder 
    { 
     TextView question, answer, id, counter; 
     Button submit_btn; 
     RadioGroup r_goup; 
     RadioButton option1, option2, option3, option4; 
    } 
} 

这里是QuestionGetSet代码

public class QuestionsGetSet 
{ 
    private String question,answer,option_1,option_2,option_3,option_4; 
    private Boolean isBool=false,isvalid=false; 
    private long id,counter; 

    private Boolean isChecked=false; 
    private int whichISchecked; 

    public void set_ischecked(Boolean a) 
    { 
     this.isChecked=a; 
    } 
    public Boolean get_ischecked() 
    { 
     return this.isChecked; 
    } 
    public void set_whichISchecked(int a) 
    { 
     this.whichISchecked=a; 
    } 
    public int get_whichISchecked() 
    { 
     return this.whichISchecked; 
    } 


    public void set_question(String q) 
    { 
     this.question=q; 
    } 
    public String get_question() 
    { 
     return this.question; 
    } 
    public void set_answer(String q) 
    { 
     this.answer=q; 
    } 
    public String get_answer() 
    { 
     return this.answer; 
    } 
    public void set_option_1(String q) 
    { 
     this.option_1=q; 
    } 
    public String get_option_1() 
    { 
     return this.option_1; 
    } 
    public void set_option_2(String q) 
    { 
     this.option_2=q; 
    } 
    public String get_option_2() 
    { 
     return this.option_2; 
    } 
    public void set_option_3(String q) 
    { 
     this.option_3=q; 
    } 
    public String get_option_3() 
    { 
     return this.option_3; 
    } 
    public void set_option_4(String q) 
    { 
     this.option_4=q; 
    } 
    public String get_option_4() 
    { 
     return this.option_4; 
    } 

    public void set_isBool(Boolean q) 
    { 
     this.isBool=q; 
    } 
    public Boolean get_isBool() 
    { 
     return this.isBool; 
    } 
    public void set_isvalid(Boolean q) 
    { 
     this.isvalid=q; 
    } 
    public Boolean get_isvalid() 
    { 
     return this.isvalid; 
    } 

    public void set_id(long q) 
    { 
     this.id=q; 
    } 
    public long get_id() 
    { 
     return this.id; 
    } 
    public void set_counter(long q) 
    { 
     this.counter=q; 
    } 
    public long get_counter() 
    { 
     return this.counter; 
    } 
} 

回答

0

在QuestionAdapter类

不要,如果条件只用别的

外汇使用别的

更换

else if(!qgs.get_ischecked()) 

else 
+0

对不起兄弟,这不是正确的语法。 else语句没有条件,即使只有“else”也不能解决问题。 – user3024990 2015-04-05 15:20:01

相关问题