Android在对话框中显示另一个对话框

Aks*_*hay 14 android dialog

我试图从另一个对话框的按钮的onClick侦听器显示一个对话框,但第二个对话框将不会显示.我搜索并发现了一个类似的问题 - 在Android中的Dialogs命令,尝试了提供的解决方案,但即使这样也行不通.

我的代码与答案中提供的代码非常相似.

public void onClick(DialogInterface对话框,int id){showDialog(SECOND_DIALOG); dialog.dismiss(); }

任何帮助将非常感激.

谢谢,

阿克沙伊

Bil*_*ote 9

这就是我这样做的方式:

    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)


pub*_*oid 5

我知道这是前一段时间被问过的,但我发现这是一个非常简洁的解决方案.

我定义了一个这样的接口:

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方法中),否则这似乎有效精美.