如何阅读单选按钮状态

时间:2012-01-27 14:13:59

标签: android radio-button alertdialog

我有一个名为options.xml的xml文件 我用它来创建我的AlertDialog。我还为AlertDialog添加了一个Done按钮。 按下完成按钮后,将调用onClick方法。但是,无论我在点击Done之前检查过哪个RadioButton,我总是将第一个RadioButton视为已选中,其他则未经检查。 我假设我正在做的事情只是读取xml值而不是实际的运行时间值?那么如何读取实际的运行时值?

    public void onClick(DialogInterface arg0, int arg1) {
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ;
            View layout = inflater.inflate(R.layout.options, null);
            RadioButton a1 = (RadioButton)layout.findViewById(R.id.radio0);
            RadioButton a2= (RadioButton)layout.findViewById(R.id.radio1);
            RadioButton a3 = (RadioButton)layout.findViewById(R.id.radio2);
            RadioButton a4 = (RadioButton)layout.findViewById(R.id.radio3);
            boolean b1 = a1.isChecked();
            boolean b2 = a2.isChecked();
            boolean b3 = a3.isChecked();
            boolean b4 = a4.isChecked();

    }
编辑:我使用的解决方案“谢谢,我没有检查第二个选项,但我发现AlertDialog有findViewById,这只是在创建对话框后调用它的问题。(不需要在onCreate内部完成或你需要记住在为对话框调用show()之后调用findViewById,否则它就不能正常工作了“

1 个答案:

答案 0 :(得分:0)

你是对的,你正在读取它们的xml值,因为你试图在直接从xml充气的布局上找到ViewById。

如果mContext是Activity,您可以使用mContext.findViewById(..)。如果做不到这一点,请在onCreateDialog(..)中的某个位置定义您的RadioButton,而不是在onClick(..)内,然后使用这些来确定isChecked()。

这是一个类似的例子,我必须从onClick(..)方法中获取EditText的值。如果您需要final修饰符,Eclipse应该告诉您。这都在onCreateDialog(..)方法中。

case FIRST_TRANSLATE:
        View view = mHost.getLayoutInflater().inflate(R.layout.first_translate, null);
        //Define your radiobuttons here
        final EditText mLanguage = (EditText) view.findViewById(R.id.editText1);
        b.setView(view)
        .setTitle(R.string.dialog_first_translate_title)
        .setPositiveButton(sOkay, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int arg1) {
                //Retrieve their values here
                mHost.getSharedPreferences(States.INTERNAL_PREFS, 0).edit().putString("deflang", mLanguage.getText().toString()).commit();
                dialog.dismiss();
            }

        }).create();