2013-06-04 58 views
3

我試着做一個測驗應用程序與翻譯。所以有兩種不同語言的問題加載的ArrayList。帶有自定義佈局的ListView包括兩個RadioButton

我也可以在列表視圖中顯示它們。我的問題是當我點擊一個Radiobutton時,我想另一個Radiobutton也被選中。

我正在使用帶有2個Radiobutton的自定義佈局的ListView。

這是我的ListView

private class RBAdapterClass extends ArrayAdapter<cOptions> { 

private ArrayList<cOptions> fOptions; 
private ArrayList<cOptions> lOptions; 
private ArrayList<Boolean> mChecked;  
private int mfSelectedPosition = -1; 
private RadioButton mfSelectedRB; 
private int mlSelectedPosition = -1; 
private RadioButton mlSelectedRB; 


public RBAdapterClass(Context context, int textViewResourceId, ArrayList<cOptions> lOpt, ArrayList<cOptions> fOpt) 
{ 
    super(context,textViewResourceId,fOpt);  
    this.fOptions = new ArrayList<cOptions>(); 
    this.fOptions.addAll(fOpt);    
    this.lOptions = new ArrayList<cOptions>(); 
    this.lOptions.addAll(lOpt);  
    mChecked = new ArrayList<Boolean>(); 
} 
    class ViewHolder {  
    TextView ForeignCode; 
    RadioButton ForeignName; 
    TextView LocalCode; 
    RadioButton LocalName; 
} 


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

    final ViewHolder holderf ;    
    Log.v("Convert View",String.valueOf(position)); 

    if(convertView==null){ 

    LayoutInflater vi = (LayoutInflater)getSystemService(
    Context.LAYOUT_INFLATER_SERVICE); 
    convertView = vi.inflate(R.layout.activity_activity_rb,null); 

     holderf=new ViewHolder();   

     holderf.LocalCode = (TextView) convertView.findViewById(R.id.codeLocal); 
     holderf.LocalName = (RadioButton)convertView.findViewById(R.id.radioBLocal);   

     holderf.ForeignCode = (TextView) convertView.findViewById(R.id.codeForeign);   
     holderf.ForeignName = (RadioButton)convertView.findViewById(R.id.radioBForeign); 


     convertView.setTag(holderf); 



     holderf.ForeignName.setOnClickListener(new View.OnClickListener() {                

      public void onClick(View v) { 


      RadioButton rb = (RadioButton) v ; 

      if(position != mfSelectedPosition && mfSelectedRB!=null ) 
      { 
       mfSelectedRB.setChecked(false);      
       if(mlSelectedRB!=null) 
       { 
       mlSelectedRB.setChecked(false); 
       } 

      } 

      mfSelectedPosition = position;    
      mfSelectedRB = (RadioButton)v;    



      cOptions optSelected = (cOptions) rb.getTag();     

      Toast.makeText(getApplicationContext(),"Clicked on RadioButton: " + rb.getText() +" is " + rb.isChecked(), 
      Toast.LENGTH_LONG).show(); 

      optSelected.setSeleted(rb.isChecked()); 


      holderf.ForeignName.setChecked(rb.isChecked());         
      holderf.LocalName.setChecked(rb.isChecked()); 


     } 
     }); 


     holderf.LocalName.setOnClickListener(new View.OnClickListener() {      

      public void onClick(View v) { 

      if(position != mlSelectedPosition && mlSelectedRB!=null) 
      { 
       mlSelectedRB.setChecked(false); 
       if(mfSelectedRB!=null) 
       { 
       mfSelectedRB.setChecked(false); 
       } 
      }       
      mlSelectedPosition = position;    
      mlSelectedRB = (RadioButton)v;    
      RadioButton rb = (RadioButton) v ;     
      cOptions optSelected = (cOptions) rb.getTag(); 
      Toast.makeText(getApplicationContext(), 
      "Clicked on RadioButton: " + rb.getText() +" is " + rb.isChecked(),Toast.LENGTH_LONG).show(); 
      optSelected.setSeleted(rb.isChecked()); 
      holderf.ForeignName.setChecked(rb.isChecked()); 
      holderf.LocalName.setChecked(rb.isChecked()); 
     } 
     }); 


     } 

    else 

    { 
     holderf = (ViewHolder) convertView.getTag(); 
     } 

     cOptions optfSelected = fOptions.get(position); 

     cOptions optlSelected = lOptions.get(position); 

     if(mlSelectedPosition!=position) 
     { 

      holderf.ForeignCode.setText(" (" + optfSelected.getsOptionsText() + ")");    
      holderf.ForeignName.setText(optfSelected.getsOptionsText());       
      holderf.ForeignName.setChecked(optfSelected.getSeleted());       
      holderf.ForeignName.setTag(optfSelected);    


      holderf.LocalCode.setText("("+optlSelected.getsOptionsText()+")"); 
      holderf.LocalName.setText(optlSelected.getsOptionsText());       
      holderf.LocalName.setChecked(optlSelected.getSeleted());       
      holderf.LocalName.setTag(optlSelected);    

     } 

     else 
     { 

      holderf.ForeignCode.setText(" (" + optfSelected.getsOptionsText() + ")");              
      holderf.ForeignName.setText(optfSelected.getsOptionsText());   
      holderf.ForeignName.setChecked(optfSelected.getSeleted()); 
      holderf.ForeignName.setTag(optfSelected); 



      holderf.LocalCode.setText("("+optlSelected.getsOptionsText()+")"); 
      holderf.LocalName.setText(optlSelected.getsOptionsText());       
      holderf.LocalName.setChecked(optlSelected.getSeleted());       
      holderf.LocalName.setTag(optlSelected);   


     } 



    return convertView; 
    } 
} 

}

+0

歡迎來到SO!我編輯了您的文章的格式,使其更具可讀性。 – Brian

回答

0

。在你的代碼中沒有複選框ArrayAdater。認爲它將是單選按鈕。我不明白你爲什麼要同時檢查兩個單選按鈕。無論如何,如果你分開設置,(不在RadioGroup),那麼你可以一次檢查兩者。

一個建議:在if-else塊之外寫入onClick監聽器

+0

複選框和單選按鈕取決於問題。在這種情況下,它的RadioButton。我正在使用ArrayList,正如你可以從代碼中看到的那樣,創建列表。你能解釋更多嗎? – Chintu

+0

您的onClick事件是否按照您的寫法工作?一個建議:在if-else塊之外寫入你的onClick監聽器。 – Nizam

+0

是啊,它後,我把它放在外面..謝謝 – Chintu