我试图从另一个对话框的按钮的onClick侦听器显示一个对话框,但第二个对话框将不会显示.我搜索并发现了一个类似的问题 - 在Android中的Dialogs命令,尝试了提供的解决方案,但即使这样也行不通.
我的代码与答案中提供的代码非常相似.
public void onClick(DialogInterface对话框,int id){showDialog(SECOND_DIALOG); dialog.dismiss(); }
任何帮助将非常感激.
谢谢,
阿克沙伊
这就是我这样做的方式:
if (!appPrefs.getAcceptedUsageAggrement()) {
tracker.trackPageView("/UsageAgreementDialog");
acceptedUsage_alertDialog = new AlertDialog.Builder(BroadcastSMSActivity.this)
.setTitle(R.string.accept_usage_title)
.setMessage(R.string.accept_usage_message)
.setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (appPrefs.getAppVer().equals("")) {
tracker.trackEvent("Application", "Install", getAppVerName(), 1);
} else {
tracker.trackEvent("Application", "Upgrade", appPrefs.getAppVer().toString()+"->"+getAppVerName(), 1);
}
displayRecentChanges = true;
appPrefs.saveAppVer(getAppVerName());
appPrefs.saveAcceptedUsageAggrement(true);
// Display Recent Changes on 1st use of new version
if (displayRecentChanges) {
tracker.trackPageView("/RecentChangesDialog");
recentChanges_alertDialog = new AlertDialog.Builder(BroadcastSMSActivity.this)
.setTitle(getString(R.string.changes_title, getAppVerName()))
.setMessage(R.string.changes_dialog)
.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
recentChanges_alertDialog.cancel();
acceptedUsage_alertDialog.cancel();
}
})
.create();
recentChanges_alertDialog.show();
}
}
})
.create();
acceptedUsage_alertDialog.show();
}
Run Code Online (Sandbox Code Playgroud)
我知道这是前一段时间被问过的,但我发现这是一个非常简洁的解决方案.
我定义了一个这样的接口:
public interface OpenDialog {
public void showDialog(DialogFragment dialog);
}
Run Code Online (Sandbox Code Playgroud)
我的活动然后实现,使用我的InterfaceHolder类,在打开对话框时将引用传递给对话框:
public class MyActivity extends FragmentActivity implements OpenDialog {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
InterfaceHolder.set(this);
showDialog(new DialogOne());
}
public void showDialog(DialogFragment dialog) {
dialog.show(getSupportFragmentManager(), "tag");
}
Run Code Online (Sandbox Code Playgroud)
InterfaceHolder只是一个类,它带有我用来传递它的接口的静态引用:
public class InterfaceHolder {
private static OpenDialog openDialog;
public void set(OpenDialog openDialog)
this.openDialog = openDialog;
}
public void get()
return openDialog;
}
Run Code Online (Sandbox Code Playgroud)
所以showDialog方法将显示我传递给它的任何对话框; 如你所见,我这样做是为了显示DialogOne.现在,如果我想在"DialogOne"中打开一个名为"DialogTwo"的新对话框,我可以通过以下方式调用它:
InterfaceHolder.get().showDialog(new DialogTwo());
dismiss();
Run Code Online (Sandbox Code Playgroud)
瞧,DialogTwo正在展示.显然,您必须小心确保已将对您的活动的引用传递给InterfaceHolder(这样做的一个好方法是将InterfaceHolder.set(this)放在showDialog方法中),否则这似乎有效精美.
| 归档时间: |
|
| 查看次数: |
41085 次 |
| 最近记录: |