user2405469
user2405469

Reputation: 2003

Android Dialog not appearing

I just picked up the android SDK and eclipse and decided to write a simple dialog that pops up when you click a button, however I found out that the showDialog() method has been deprecated and that the DialogFragment was the best way to go about making one, so here it is:

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");
        }
    });
}
}

The Debugger shows the error at:

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

On further inspection, the fm variable is null according to the variables tab in the debugger, why is this so and is there a more efficient solution to this? I am seriously new to android, sorry if this is an easy question.

Upvotes: 0

Views: 1634

Answers (1)

TronicZomB
TronicZomB

Reputation: 8747

You should use an AlertDialog in this case, not a DialogFragment. Here is how I would do it:

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();
     }
}

DialogFragments should be used in conjunction with other Fragments, in the case of a single activity it would be best to use an AlertDialog.

Upvotes: 1

Related Questions