我有一个名为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,否则它就不能正常工作了“
答案 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();