2014-03-04 72 views
4

我試圖使用提供的代碼作爲出現在網站上的第一個答案標題。儘管我試圖修改它,但我無法完成工作。問題是,當我檢查除第一個單選按鈕以外的單選按鈕時,它們都保持檢查狀態。關於http://stackoverflow.com/questions/2381560/how-to-group-a-3x3-grid-of-radio-buttons

問題是:何時調用addView方法?

而且,這裏是我的版本的代碼,我希望有人能告訴我我的錯誤:

public class ToggleButtonGroupTableLayout extends TableLayout implements  OnClickListener { 

private static final String TAG = "ToggleButtonGroupTableLayout"; 
private ToggleButtonGroupTableLayout radGroup; 
private RadioButton activeRadioButton; 

/** 
* @param context 
*/ 
public ToggleButtonGroupTableLayout(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
} 

/** 
* @param context 
* @param attrs 
*/ 
public ToggleButtonGroupTableLayout(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void onClick(View v) { 
    final RadioButton rb = (RadioButton) v; 
    radGroup = (ToggleButtonGroupTableLayout) findViewById(R.id.radGroup1); 
    int activeRadioButtonId = radGroup.getCheckedRadioButtonId(v); 
    Log.i(TAG,"FIRST " + activeRadioButtonId); 
//  if (activeRadioButtonId != -1 && activeRadioButton != null) { 
//   activeRadioButton.setChecked(false); 
//  } 
    rb.setChecked(true); 
    //activeRadioButton = rb; 
    if (activeRadioButtonId != -1 && activeRadioButton != null) { 
     activeRadioButton = (RadioButton) findViewById(activeRadioButtonId); 
     activeRadioButton.setChecked(false); 
    } 
    else 
     Log.i(TAG,"" + activeRadioButton + " " + activeRadioButtonId); 
} 

/* (non-Javadoc) 
* @see android.widget.TableLayout#addView(android.view.View, int, android.view.ViewGroup.LayoutParams) 
*/ 
@Override 
public void addView(View child, int index, 
     android.view.ViewGroup.LayoutParams params) { 
    super.addView(child, index, params); 
    setChildrenOnClickListener((TableLayout)child); 
} 


/* (non-Javadoc) 
* @see android.widget.TableLayout#addView(android.view.View, android.view.ViewGroup.LayoutParams) 
*/ 
@Override 
public void addView(View child, android.view.ViewGroup.LayoutParams params) { 
    super.addView(child, params); 
    setChildrenOnClickListener((TableLayout)child); 
} 


private void setChildrenOnClickListener(TableLayout tl) { 
    final int c = tl.getChildCount(); 
    for (int i=0; i < c; i++) { 
     final View v = tl.getChildAt(i); 
     if (v instanceof TableRow) { 
      final int c1 = ((TableRow) v).getChildCount(); 
      for (int j = 0; j < c1; j++) { 
       View v1 = ((TableRow) v).getChildAt(j); 
       if (v1 instanceof RadioButton) 
        v1.setOnClickListener(this); 
      } 
     } 
    } 
} 

public int getCheckedRadioButtonId(View v) { 
    if (activeRadioButton != null) { 
     return activeRadioButton.getId(); 
    } 

    return -1; 
} 

回答

4

只需修改setChildrenOnClickListener:

private void setChildrenOnClickListener(TableRow tr) { 
    final int c = tr.getChildCount(); 
    for (int i=0; i < c; i++) { 
     final View v = tr.getChildAt(i); 
     if (v instanceof RadioButton) { 
      v.setOnClickListener(this); 
      if (((RadioButton) v).isChecked()) 
       activeRadioButton = (RadioButton) v; 
     } 
    } 

} 
0

我知道這個問題是問前一陣子,但無論如何,我想我知道答案.. 你遇到的問題是因爲你有更多的radioButtons沒有,或相同的ID。你需要設置他們不同的ID以便他們工作。

希望這會幫助別人。