【问题标题】:Regarding http://stackoverflow.com/questions/2381560/how-to-group-a-3x3-grid-of-radio-buttons关于 http://stackoverflow.com/questions/2381560/how-to-group-a-3x3-grid-of-radio-buttons
【发布时间】:2014-03-04 00:41:07
【问题描述】:

我尝试使用提供的代码作为标题中出现的网站上的第一个答案。尽管我尝试对其进行修改,但我无法使其工作。问题是,当我选中第一个单选按钮以外的单选按钮时,它们都保持选中状态。

问题是: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;
}

【问题讨论】:

    标签: android radio-button grouping


    【解决方案1】:

    只需修改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;
            }
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      我知道之前有人问过这个问题,但无论如何我想我知道答案.. 您遇到的问题是因为您有更多没有 ID 或 ID 相同的单选按钮。您需要为它们设置不同的 ID 才能使其正常工作。

      希望这会对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 2022-12-27
        • 2022-10-19
        • 2022-12-01
        • 2022-12-01
        • 2022-12-02
        • 2022-12-19
        • 2022-12-02
        • 2022-12-01
        • 2022-12-02
        相关资源
        最近更新 更多