android - 当我使用 alertDialog 函数时,如何在屏幕旋转时使用 DialogFragments 保存对话框?

标签 android android-alertdialog screen-orientation android-dialogfragment

如何在这引入DialogFragment,或者我们如何在使用函数显示对话框时防止Dialog dismissal。

public void alertShow(String s){
    //Game Ended...!!!
    android.support.v7.app.AlertDialog.Builder alertDialog = new android.support.v7.app.AlertDialog.Builder(this);

    // Setting Dialog Title
    if(s.equals("You") || (s.contains("P")))
        alertDialog.setTitle("Congratulations...");
    else
        alertDialog.setTitle("Game's Up...");

    // Setting Dialog Message
    if(s.equals("You") || s.contains("P"))
        alertDialog.setMessage(s+" Win The Game...");
    else
        alertDialog.setMessage("You Lose... I Win...");

    final ImageView img = new ImageView(this);
    if(s.equals("You") || (s.contains("P")))
        img.setImageResource(R.drawable.firecrackers);
    else
        img.setImageResource(R.drawable.mmm);

    alertDialog.setView(img);

    // Setting Dialog Cancellation
    alertDialog.setCancelable(false);

    // Setting Positive "Yes" Button

    SessionClass sessionClass = (SessionClass)getApplicationContext();
    final String str = sessionClass.getPlayer();
    alertDialog.setPositiveButton("Try Again", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            Intent i;
            if(null != str && str.contains("2")){
                i = new Intent(MainActivity2.this, Game1_1.class);
                startActivity(i);
            }
            finish();
        }
    });

    // Setting Negative "NO" Button
    alertDialog.setNegativeButton("Main Menu", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            Intent intent = new Intent(MainActivity2.this, MainActivity2.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |  Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
            startActivity(intent);
            finish();
        }
    });

    // Showing Alert Message
    alertDialog.show();
}

我是 Android 的新手,所以我不知道如何将其更改为屏幕方向改变时不会消失的对话框。

最佳答案

您只需创建一个 DialogFragment 类,创建一个 AlertDialog,然后在 AlertDialog 上执行您现在正在执行的所有操作。您可以在构造函数中发送 String。然后,您可以回调点击事件的 Activity 。

DialogFragment 类似这样的东西(这在它自己的 Java 文件中):

import android.support.v7.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;

public class GameDialogFragment extends DialogFragment {

    String s;

    public GameDialogFragment(String str) {
        this.s = str;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        String title = "";
        String message = "";

        if(s.equals("You") || (s.contains("P")))
            title = "Congratulations...";
        else
            title = "Game's Up...";

        if(s.equals("You") || s.contains("P"))
            message = s+" Win The Game...";
        else
            message = "You Lose... I Win...";

        final ImageView img = new ImageView(getActivity());
        if(s.equals("You") || (s.contains("P")))
            img.setImageResource(R.drawable.firecrackers);
        else
            img.setImageResource(R.drawable.mmm);

        AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());

        alertBuilder.setView(img);


        AlertDialog dialog = builder.setTitle(title)
                .setMessage(message)
                .setPositiveButton("Try Again", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ((MainActivity2) getActivity()).clickedYes();
                    }
                })
                .setNegativeButton("Main Menu", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ((MainActivity2) getActivity()).clickedNo();
                    }
                })
                .create();

          return dialog;
    }
}

然后,在 Activity 中,在您的 alertShow() 方法中显示 DialogFragment,并定义点击处理程序:

public void alertShow(String s){
   new GameDialogFragment(s).show(getFragmentManager(), "");
}

public void clickedYes() {
    SessionClass sessionClass = (SessionClass)getApplicationContext();
    String str = sessionClass.getPlayer();
    Intent i;
    if(null != str && str.contains("2")){
      i = new Intent(MainActivity2.this, Game1_1.class);
      startActivity(i);
    }
}

public void clickedNo() {
    Intent intent = new Intent(MainActivity2.this, MainActivity2.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |  Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
    startActivity(intent);
}

关于android - 当我使用 alertDialog 函数时,如何在屏幕旋转时使用 DialogFragments 保存对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228585/

相关文章:

Android-是否可以在字符串资源中添加可点击的链接

android - 如何通过将值传递给 AlertDialog 的 Intent 来转到下一个 Activity?

横向和纵向的 Android 启动画面

android - 防止多次安装我的 Android 应用程序

javascript - React Native Navigator renderView 返回条件不合逻辑

java - Android:使用简单的警报对话框处理 AsyncTask 中的 SocketTimeoutException

android - 屏幕方向期间 fragment 内的异步任务

ios - 我应该在我的 iOS 应用程序中启用还是禁用颠倒?

android - 为 android 构建 tensorflow 时出现 Bazel 错误 "this rule is missing dependency declarations for the following files"

android - 如何从 branch.io 发送的消息中的链接打开应用程序?