2013-09-30 42 views
0

我有一個列表視圖,列表項中有三個單選按鈕,問題是當我滾動列表視圖時,單選按鈕的選定位置被更改。所以,請讓我知道如何保持單選按鈕的選擇,即使我滾動列表視圖。我的代碼,Android:單選按鈕在列表視圖滾動時不斷改變它們的狀態

RadioGroupAdapter.java

public RadioGroupAdapter(Context context, int layoutResourceId, 
      Option[] data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     MatrixHolder holder = null; 



     if (row == null) { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 

      holder = new MatrixHolder(); 
      holder.txtTitle = (TextView) row.findViewById(R.id.heading); 
      holder.group = (RadioGroup) row.findViewById(R.id.radio_group1); 
      final RadioButton[] rb = new RadioButton[2]; 
      for(int i=0; i<2; i++){ 

       rb[i] = new RadioButton(context); 
       // rb[i].setButtonDrawable(R.drawable.single_radio_chice); 
       rb[i].setId(i); 
       RadioGroup.LayoutParams params = new RadioGroup.LayoutParams(
         0, LayoutParams.WRAP_CONTENT); 
       params.weight=1.0f; 
       params.setMargins(5, 0, 5, 10); 
       holder.group.addView(rb[i],params); //the RadioButtons are added to the radioGroup instead of the layout 
      } 


      // ((MatrixHolder)holder).group.clearCheck(); 


      row.setTag(holder); 
     } else { 
      holder = (MatrixHolder) row.getTag(); 
     } 

     Option option = data[position]; 
     holder.txtTitle.setText(option.title); 
     return row; 
    } 
+0

通過添加兩項功能解決預期問題: –

回答

0

試試如下:

退房Listview with RadioButtons它可以幫助你解決你的問題。

+0

@GrlsHu:我檢查了您的鏈接。除了我正在生成單選按鈕和動態列表項之外,它是一樣的。 Link向我們展示了執行相同操作的靜態方法。 –

+0

結帳類似的帖子也。 http://stackoverflow.com/questions/18842599/android-radio-buttons-in-a-custom-listview-changes-its-state-when-we-scroll-the – GrIsHu

+0

沒有幫助。任何其他解決方案相同? –

6

通過添加兩個不同的功能解決了我的問題: 我知道它幾乎是一個黑客,但它的工作原理。所以沒關係;)

@Override 
    public int getViewTypeCount() {     
        //Count=Size of ArrayList. 
     return data.length; 
    } 

    @Override 
    public int getItemViewType(int position) { 

     return position; 
    } 
+1

覆蓋這兩個函數將讓適配器知道有多少物品和他們的位置是什麼 偉大的工作 –

0

你應該使用Map<Integer, <Value>>然後把你的檢查收音機項目在裏面。關鍵是listview的項目位置。值;您的單選按鈕視圖值。

0

在我的情況我listview項目包含與3 radioButtons一個radiogroup,這是我如何解決這個問題

首先,我宣佈3張地圖給我的三排(含單選按鈕1,2,3)

private static Map<Integer, Boolean> firstRow = new HashMap<Integer, Boolean>(); 
private static Map<Integer, Boolean> secondRow = new HashMap<Integer, Boolean>(); 
private static Map<Integer, Boolean> thirdRow = new HashMap<Integer, Boolean>(); 

無線電集團onCheckedCangedListener:

group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) { 
     switch (checkedId) { 
      case R.id.opt1: 
       if(!firstRow.containsKey(pstn)){ 
        firstRow.put(pstn, true); 
        secondRow.remove(pstn); 
        thirdRow.remove(pstn); 
       } 
       break; 
      case R.id.opt2: 
       if(!secondRow.containsKey(pstn)){ 
        secondRow.put(pstn, true); 
        firstRow.remove(pstn); 
        thirdRow.remove(pstn); 
       } 
       break; 
      case R.id.opt3: 
       if(!thirdRow.containsKey(pstn)){ 
        thirdRow.put(pstn, true); 
        secondRow.remove(pstn); 
        firstRow.remove(pstn); 
       } 
       break; 
      } 
     } 
    }); 

最後更新單選按鈕檢查STA te:

if(firstRow.containsKey(position)){ 
    r1.setChecked(firstRow.get(position)); 
} 
if(secondRow.containsKey(position)){ 
    r2.setChecked(secondRow.get(position)); 
} 
if(thirdRow.containsKey(position)){ 
    r3.setChecked(thirdRow.get(position)); 
} 
相關問題