1

我正在尝试获取添加到单选组并添加到线性布局的单选按钮的值,然后从我的活动中调用该类。这是我的代码:

MultiChoice.java

public class MultipleChoice {

Context context;
List<String> choice_values;
String hint;

public MultipleChoice (Context context, String hint,  List<String> choice_value_array){
    choice_values = new ArrayList<String>();
    this.context = context;
    this.choice_values = choice_value_array;
    this.hint = hint;
}

public View createRadioGroup(){
    LinearLayout llContainer = new LinearLayout(context);
    llContainer.setOrientation(LinearLayout.VERTICAL);
    llContainer.addView(hintTextView());
    llContainer.addView(radioButtons());
    return llContainer;
}

private TextView hintTextView() {
    // TODO Auto-generated method stub
    TextView tvHint = new TextView(context);
    tvHint.setText(hint);
    return tvHint;
}

private RadioGroup radioButtons() {
    // TODO Auto-generated method stub
    RadioGroup rbGroup = new RadioGroup(context);
    rbGroup.setOrientation(RadioGroup.VERTICAL);
    for (String value : choice_values){
        RadioButton rbValue = new RadioButton(context);
        rbGroup.addView(rbValue);
        rbValue.setText(value);
    }
    return rbGroup;
}
}

这就是我在我的活动中创建控件的方式:

LinearLayout template_container = (LinearLayout) findViewById(R.id.llTemplate);
MultipleChoice mcControl = new MultipleChoice(getApplicationContext(), parts[0], choices);
control = mcControl.createRadioGroup();
template_container.addView(control);

我已经尝试过这样的事情,但我不确定我是否正在尝试正确的方法,因为它不起作用:

View child = template_container.getChildAt(i);
LinearLayout v = ((LinearLayout)child);
View rgView = v.getChildAt(1);
RadioGroup rg = ((RadioGroup)rgView);

RadioGroup添加并显示正常。我要做的就是获取所选单选按钮的值。提前致谢!

编辑

这就是我获得 an 值的方式EditText,它工作正常。

我得到控件并将其添加到包含视图的列表中,然后如果视图包含以下内容,我会使用它来获取值EditText

String text = ((EditText)view).getText().toString().trim();
4

4 回答 4

0

这可能真的很有帮助:http: //developer.android.com/guide/topics/ui/controls/radiobutton.html#HandlingEvents

您可能需要在id单选按钮中添加一个。

于 2014-02-26T11:30:01.703 回答
0

您可以通过编程方式在单选按钮上设置 id。请检查这里

Android:以编程方式查看.setID(int id) - 如何避免 ID 冲突?

然后使用 findviewbyId 获取单选按钮

于 2014-02-26T11:31:48.727 回答
0

你可以试试这个:首先使用: android:id="@+id/radiogroup"向radiogroup添加一个id

RadioGroup rbGroup = (RadioGroup)findViewById(R.id.radiogroup);

int RadioButtonId=rbGroup.getCheckedRadioButtonId();
        View radioButton = rbGroup.findViewById(RadioButtonId);

        String = Integer.toString(rbGroup.indexOfChild(radioButton)+1);

您还可以使用以下方式以编程方式添加 ID:

View.setId(int id);
于 2014-02-26T11:37:18.407 回答
0

我通过在创建时向单选按钮添加一个 onCheckChanged 侦听器解决了这个问题,然后将选定的值保存到共享首选项中。当我需要这些值时,我只是通过迭代我用作共享首选项中的键的 id 来获得所有共享首选项。我的代码:

private RadioGroup radioButtons(final int radio_id) {
    // TODO Auto-generated method stub
    RadioGroup rbGroup = new RadioGroup(context);
    rbGroup.setOrientation(RadioGroup.VERTICAL);
    for (final String value : choice_values) {
        RadioButton rbValue = new RadioButton(context);
        rbGroup.addView(rbValue);
        rbValue.setText(value);
        rbValue.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
                // TODO Auto-generated method stub
                savePreferences("" + radio_id, value);
            }

        });
    }
    return rbGroup;
}



private void savePreferences(String key, String value) {

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);

    Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
}

并获取值:

int radio_check = 0;
for (View view : addedControls) {
            String entered_value = getControlValue(view, radio_check);
            radio_check++;
        }

在我的 getValue() 方法中:

text = loadSavedPreferences("" + (radio_check));

LoadPrefs 方法:

private String loadSavedPreferences(String key) {

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

    String name = sharedPreferences.getString(key, "Default");
    return name;
}
于 2014-02-27T08:19:48.650 回答