永远不会调用 setOnCheckedChangeListener
setOnCheckedChangeListener is never called
我一整天都在努力理解,为什么我的方法 setOnChangeListener 从未被调用过……它在第一个 Toast 之前运行良好……第二个 Toast 从未出现。怎么了?我应该以某种方式将视图传递给 onCheckedChangeListener 吗?我有 activity,用户可以在其中单击按钮,然后他会得到 alertdialog,里面有 3 个单选按钮和 radiogroup。我想知道他选择了什么单选按钮。不管我试过什么。没有任何效果。我总是只有一个单选按钮被选中,我在 xml 布局中检查过...帮助...
Button setWeekType = (Button) findViewById(R.id.setWeekType);
if (setWeekType != null) {
setWeekType.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(report_activity.this, R.style.DialogTheme)
.setView(R.layout.dialog_type_day)
.setCancelable(true)
.setPositiveButton("Choose", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final View child = getLayoutInflater().inflate(R.layout.dialog_type_day, null);
final RadioGroup radiogroup = (RadioGroup)child.findViewById(R.id.radiogroup);
final RadioButton bhome = (RadioButton)child.findViewById(R.id.bhome);
final RadioButton bwork = (RadioButton)child.findViewById(R.id.bwork);
final RadioButton bschool = (RadioButton)child.findViewById(R.id.bschool);
bwork.setChecked(true);
Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT).show();
radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT).show();
if (checkedId == bhome.getId()) {
bhome.setChecked(true);
}if (checkedId == bwork.getId()) {
bwork.setChecked(true);
}if (checkedId == bschool.getId()) {
bschool.setChecked(true);
}
}
});
}
})
.setNegativeButton("Cancel", null)
.show();
}
});
}
你可以把它改成 else if。示例:
if (checkedId == bhome.getId()) {
bhome.setChecked(true);
}else if (checkedId == bwork.getId()) {
bwork.setChecked(true);
}else if (checkedId == bschool.getId()) {
bschool.setChecked(true);
}
并且您可以在点击监听器的顶部设置 oncheckedchangelistener
您正在从(肯定)按钮回调中调用 setOnCheckedChangeListener
。这意味着您的第二个 Toast 只能在用户单击 "Choose" 按钮后显示(这可能为时已晚)。
您需要从 AlertDialog 实例中找到无线电组并在显示对话框之前调用 setOnCheckedChangeListener
。
我 运行 您的代码,我认为问题出在 child
视图,是 null
!所以 radiogroup
也是 null
而 listener
将永远不会被设置,使用日志记录来查看你自己。
我建议您创建自定义 DialogFragment
以摆脱嵌套内部 类 并更轻松地管理事情。
如果您需要教程:
http://www.androidbegin.com/tutorial/android-dialogfragment-tutorial/
我一整天都在努力理解,为什么我的方法 setOnChangeListener 从未被调用过……它在第一个 Toast 之前运行良好……第二个 Toast 从未出现。怎么了?我应该以某种方式将视图传递给 onCheckedChangeListener 吗?我有 activity,用户可以在其中单击按钮,然后他会得到 alertdialog,里面有 3 个单选按钮和 radiogroup。我想知道他选择了什么单选按钮。不管我试过什么。没有任何效果。我总是只有一个单选按钮被选中,我在 xml 布局中检查过...帮助...
Button setWeekType = (Button) findViewById(R.id.setWeekType);
if (setWeekType != null) {
setWeekType.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(report_activity.this, R.style.DialogTheme)
.setView(R.layout.dialog_type_day)
.setCancelable(true)
.setPositiveButton("Choose", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final View child = getLayoutInflater().inflate(R.layout.dialog_type_day, null);
final RadioGroup radiogroup = (RadioGroup)child.findViewById(R.id.radiogroup);
final RadioButton bhome = (RadioButton)child.findViewById(R.id.bhome);
final RadioButton bwork = (RadioButton)child.findViewById(R.id.bwork);
final RadioButton bschool = (RadioButton)child.findViewById(R.id.bschool);
bwork.setChecked(true);
Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT).show();
radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT).show();
if (checkedId == bhome.getId()) {
bhome.setChecked(true);
}if (checkedId == bwork.getId()) {
bwork.setChecked(true);
}if (checkedId == bschool.getId()) {
bschool.setChecked(true);
}
}
});
}
})
.setNegativeButton("Cancel", null)
.show();
}
});
}
你可以把它改成 else if。示例:
if (checkedId == bhome.getId()) {
bhome.setChecked(true);
}else if (checkedId == bwork.getId()) {
bwork.setChecked(true);
}else if (checkedId == bschool.getId()) {
bschool.setChecked(true);
}
并且您可以在点击监听器的顶部设置 oncheckedchangelistener
您正在从(肯定)按钮回调中调用 setOnCheckedChangeListener
。这意味着您的第二个 Toast 只能在用户单击 "Choose" 按钮后显示(这可能为时已晚)。
您需要从 AlertDialog 实例中找到无线电组并在显示对话框之前调用 setOnCheckedChangeListener
。
我 运行 您的代码,我认为问题出在 child
视图,是 null
!所以 radiogroup
也是 null
而 listener
将永远不会被设置,使用日志记录来查看你自己。
我建议您创建自定义 DialogFragment
以摆脱嵌套内部 类 并更轻松地管理事情。
如果您需要教程: http://www.androidbegin.com/tutorial/android-dialogfragment-tutorial/