Android 如何将单选按钮添加到单选组

Android 如何将单选按钮添加到单选组,android,radio-button,Android,Radio Button,我有一个表格布局,在每一行的第三列我想放置一个广播组。 我构建单选按钮如下: rg = (RadioGroup) findViewById(R.id.radioGroup1); for (int k = 0; k < size; k++) { rb[k] = new RadioButton(context); rg.addView(rb[k]); } RadioGroup group = (RadioGroup) findViewById(R.id.radioGroup

我有一个表格布局,在每一行的第三列我想放置一个广播组。 我构建单选按钮如下:

rg = (RadioGroup) findViewById(R.id.radioGroup1);

for (int k = 0; k < size; k++) {
    rb[k] = new RadioButton(context);
    rg.addView(rb[k]);
}
RadioGroup group = (RadioGroup) findViewById(R.id.radioGroup1);
RadioButton button;
for(int i = 0; i < 3; i++) {
    button = new RadioButton(this);
    button.setText("Button " + i);
    group.addView(button);
}
rg=(放射组)findviewbyd(R.id.RadioGroup 1);
对于(int k=0;k

但是这会导致我的应用程序崩溃,有什么想法吗?

您正在构建一个长度为
megethos
的基本数组,但是您的循环使用长度
大小
。如果
megethos
size
是不同的值,则可能会导致许多不同类型的错误。。。但所有这些都是多余的,因为一个放射组会为您保持此阵列的最新状态

我想试试这样的东西:

rg = (RadioGroup) findViewById(R.id.radioGroup1);

for (int k = 0; k < size; k++) {
    rb[k] = new RadioButton(context);
    rg.addView(rb[k]);
}
RadioGroup group = (RadioGroup) findViewById(R.id.radioGroup1);
RadioButton button;
for(int i = 0; i < 3; i++) {
    button = new RadioButton(this);
    button.setText("Button " + i);
    group.addView(button);
}
另外,请始终张贴您的logcat错误,它准确地告诉我们哪里出了问题以及在哪里查找。否则我们只能这样猜测

更新

错误是因为您试图将同一按钮添加到两个不同的布局:

tr[k].addView(rb[k]);
rg.addView(rb[k]);
一个视图只能有一个父视图。据我所知,如果不首先进行大量定制,就无法将一个放射组拆分为多个视图。但是,ListView已经具有内置功能setChoiceMode(),其行为类似于RadioGroup:

List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, list);
ListView listView = (ListView) findViewById(R.id.list);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setAdapter(adapter);
List List=new ArrayList();
列表。添加(“一”);
列表。添加(“两个”);
列表。添加(“三”);
ArrayAdapter=新的ArrayAdapter(这个,android.R.layout.simple\u列表\u项已选中,列表);
ListView ListView=(ListView)findViewById(R.id.list);
listView.setChoiceMode(listView.CHOICE\u MODE\u SINGLE);
setAdapter(适配器);

您可以轻松调整
simple\u list\u item\u checked
以显示SSID和信号强度。希望有帮助。(如果你等的时间足够长,伊姆兰·汗可能会用图形化的更改剪切粘贴我的答案,然后再次声称它是他自己的。)

我创建了一个演示应用程序,我在其中动态添加了单选按钮,还处理了点击事件

公共类MainActivity扩展了AppCompatActivity{

RadioGroup radioGroup2;
ArrayList<String> buttonNames;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    radioGroup2 = (RadioGroup) findViewById(R.id.radioGroup2);
    buttonNames = new ArrayList<>();
    buttonNames.add("No Tip");
    buttonNames.add("10%");
    buttonNames.add("20%");
    buttonNames.add("30%");
    radioGroup2.setWeightSum(Float.parseFloat(buttonNames.size() + ""));
    radioGroup2.setBackgroundColor(Color.BLUE);


    for (int i = 0; i < buttonNames.size(); ++i) {

        RadioButton radioButton = new RadioButton(this);
        radioButton.setId(i);
        RadioGroup.LayoutParams childParam1 = new RadioGroup.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1f);
        childParam1.setMarginEnd(2);
        radioButton.setGravity(Gravity.CENTER);
        radioButton.setLayoutParams(childParam1);
        radioButton.setBackground(null);
        radioButton.setText(buttonNames.get(i));
        radioButton.setTextColor(Color.BLUE);
        radioButton.setBackgroundColor(Color.WHITE);
        radioButton.setButtonDrawable(null);
        if (buttonNames.get(i).equals("20%")) {
            radioButton.setChecked(true);
            radioButton.setBackgroundColor(Color.BLUE);
            radioButton.setTextColor(Color.WHITE);
        }
        radioGroup2.addView(radioButton, childParam1);

    }


    radioGroup2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i1) {
            RadioButton button = null;

            for (int i = 0; i < buttonNames.size(); ++i) {
                if (i1 == i) {
                    button = (RadioButton) findViewById(i1);
                    button.setChecked(true);
                    button.setBackgroundColor(Color.BLUE);
                    button.setTextColor(Color.WHITE);
                    Toast.makeText(getApplicationContext(), button.getText() + " checked", Toast.LENGTH_SHORT).show();
                } else {
                    button = (RadioButton) findViewById(i);
                    button.setChecked(false);
                    button.setBackgroundColor(Color.WHITE);
                    button.setTextColor(Color.BLUE);
                }
            }
        }
    });


}
RadioGroup-RadioGroup-2;
柱状钮扣;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
放射组2=(放射组)findViewById(R.id.RadioGroup 2);
buttonNames=新的ArrayList();
按钮名称。添加(“无提示”);
按钮名称。添加(“10%”;
按钮名称。添加(“20%”;
按钮名称。添加(“30%”;
radiogroup 2.setWeightSum(Float.parseFloat(buttonNames.size()+);
放射组2.背景色(颜色:蓝色);
对于(int i=0;i

}

您面临的确切问题是什么?将单选组添加到表格布局或将单选按钮添加到单选组?第二个。单选按钮没有问题。我无法将它们作为一个组,因此一次只能选择其中一个。每次我添加“rg.addView(rb[k]);”时,它都会崩溃。请在您定义的位置发布
rb
。rb=new RadioButton[megetos];这是for循环上面的一行。如果你愿意,我可以上传整个代码,这就是代码,这就是错误。好的,我知道你想做什么。但是这些都是相同的链接,你能把链接转发给你的logcat错误吗?logcat会把我直接引向它。我更新了我的答案。发布日志的另一个简单方法是突出显示错误行并按crtl-c,然后您可以将其粘贴到原始问题并使用crtl-k快速格式化。这就是我所寻找的。我认为对于我的应用程序,列表比表格更好。真的,非常感谢。