我正在课堂上实施DialogPreference
。我希望当单击对话框的正面按钮时,对话框不应该被忽略。我正在使用this answer.
在我使用的课程内:
protected void onPrepareDialogBuilder(Builder builder) {
super.onPrepareDialogBuilder(builder);
final AlertDialog d = builder.create();
d.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
Toast.makeText(mContext, "inside", Toast.LENGTH_SHORT).show();
Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO Do something
// Dismiss once everything is OK.
d.dismiss();
}
});
}
});
}
但是当我打开对话框时,我看不到Toast
,对话框关闭了。那么我对that answer的实施有何错误?
答案 0 :(得分:0)
你的情况有点不同。你不能调用" builder.create()"在onPrepareDialogBuilder方法中。请参阅API参考here。
不幸的是,这意味着您无法访问对话框对象,并且无法设置onShowListener。尝试扩展Preference类并在那里构建对话框。
答案 1 :(得分:-1)
你可以申请一个黑客(丑陋但会工作)。请尝试以下覆盖:
@Override
protected View onCreateDialogView() {
View view = super.onCreateDialogView();
view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View view) {
Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO Do something
// Dismiss once everything is OK.
d.dismiss();
}
}); }
@Override
public void onViewDetachedFromWindow(View view) {
}
});
return view;
}