Android对话框没有出现

时间:2013-05-21 13:01:51

标签: java android

我刚拿起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变量根据调试器中的变量选项卡为空,为什么会这样,是否有更有效的解决方案呢?我对android非常认真,对不起,如果这是一个简单的问题。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您应该使用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