繁体   English   中英

Android对话框未出现

[英]Android Dialog not appearing

我刚刚拿起android SDK和eclipse,决定编写一个简单的对话框,当您单击一个按钮时会弹出该对话框,但是我发现showDialog()方法已被弃用,而DialogFragment是制作该对话框的最佳方法一,所以这里是:

package net.learn2develop.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.view.View;
import android.widget.Button;

public class DialogWindow extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dialog_window);

    Button btn = (Button) findViewById(R.id.btn_dialog);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            class MyDialog extends DialogFragment {

                FragmentManager fm = getFragmentManager();

                public MyDialog() {

                }

                @Override
                public Dialog onCreateDialog(Bundle savedInstanceState) {
                    //using the builder class
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setMessage("Simple Dialog")
                        .setPositiveButton("nothing", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                //Toast.makeText(getBaseContext(), "ok then", Toast.LENGTH_SHORT).show();
                            }
                        })
                        .setNegativeButton("cancel", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                //Toast.makeText(getBaseContext(), "cancel", Toast.LENGTH_SHORT).show();

                            }
                        });

                    return builder.create();
                }


            }

            MyDialog md = new MyDialog();
            md.show(md.fm, "dialog");
        }
    });
}
}

调试器在以下位置显示错误:

md.show(md.fm, "dialog");

在进一步检查中,根据调试器中的变量选项卡,fm变量为null,为什么会这样,并且对此有更有效的解决方案吗? 我是android的新手,很抱歉,如果这是一个简单的问题。

在这种情况下,您应该使用AlertDialog ,而不是DialogFragment 这是我的方法:

public class DialogWindow extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_window);

Button btn = (Button) findViewById(R.id.btn_dialog);
btn.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        createDialog.show();
    }
});
}

public Dialog createDialog() {
      //using the builder class
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
      builder.setMessage("Simple Dialog")
         .setPositiveButton("nothing", new DialogInterface.OnClickListener() {

             @Override
             public void onClick(DialogInterface dialog, int which) {
                 //getBaseContext() is not advised (I can't remember why right now but I know I read it. You may want to read more that method but for now getActivity will work for your Toast.
                 //Toast.makeText(getActivity(), "ok then", Toast.LENGTH_SHORT).show();
          }
          })
         .setNegativeButton("cancel", new DialogInterface.OnClickListener() {

             @Override
             public void onClick(DialogInterface dialog, int which) {
               //Toast.makeText(getActivity(), "cancel", Toast.LENGTH_SHORT).show();
            }
            });

            return builder.create();
     }
}

DialogFragment应当与其他Fragments一起使用,如果是单个活动,最好使用AlertDialog

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM