Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use Dialog Fragment? (showDialog deprecated) Android

I understand that there is this documentation

http://developer.android.com/reference/android/app/DialogFragment.html#AlertDialog

but as a new Android/Java learner it is not easy to understand the amount of code involved from writing a simple alert dialog that pops up with 2 options (yes/no) message.

Here is the code I currently have in my MainActivity file:

final private int RESET_DIALOG = 0;

    private OnClickListener resetButtonListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            showDialog(RESET_DIALOG);

        }
    };

    protected android.app.Dialog onCreateDialog(int id) {
        switch(id) {
        case RESET_DIALOG: 
            AlertDialog.Builder builder = new Builder(this);
            return builder
                    .setMessage("Are you sure you want to reset the count?")
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {    

                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            Toast.makeText(MainActivity.this, "Did not reset!", 5).show();

                        }
                    })

                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {


                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            Toast.makeText(MainActivity.this, "Did Reset!", 5).show();

                        }
                    })
                    .create();
        }
        return null;
    };

This is my attempt to following the instructions on the android site: Main Activity file:

final private int RESET_DIALOG = 0;

    private OnClickListener resetButtonListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, MainDialog.class);
            startActivity(intent);

        }
    };

    protected android.app.Dialog onCreateDialog(int id) {
        switch(id) {
        case RESET_DIALOG: 
            AlertDialog.Builder builder = new Builder(this);
            return builder
                    .setMessage("Are you sure you want to reset the count?")
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {    

                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            Toast.makeText(MainActivity.this, "Did not reset!", 5).show();

                        }
                    })

                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {


                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            Toast.makeText(MainActivity.this, "Did Reset!", 5).show();

                        }
                    })
                    .create();
        }
        return null;
    };

Then created a MainDialog class: (I am actually lost in how to do this correctly or apply it)

package com.proteintracker;

import android.support.v4.app.DialogFragment;

public class MainDialog extends DialogFragment {
    public static MyAlertDialogFragment newInstance(int title) {
        MyAlertDialogFragment frag = new MyAlertDialogFragment();
        Bundle args = new Bundle();
        args.putInt("title", title);
        frag.setArguments(args);
        return frag;
    }
}

I am not sure if I was suppose to create a new class for the fragment and how to apply it to my current dialog in the activity screen.

like image 746
Lion789 Avatar asked Dec 05 '13 16:12

Lion789


People also ask

Is DialogFragment deprecated?

This class was deprecated in API level 28. Use the Support Library DialogFragment for consistent behavior across all devices and access to Lifecycle. A fragment that displays a dialog window, floating on top of its activity's window.

How do I open DialogFragment?

Step 1: Create an Android Project with empty Activity. Step 2: Create a Fragment and Open your java and XML file add these codes. Step 3: Add this code to your Fragment XML file Source Code. Step 4: Add these code In your activity button click whare open DialogFragment.

What is DialogFragment used for?

DialogFragment is a utility class which extends the Fragment class. It is a part of the v4 support library and is used to display an overlay modal window within an activity that floats on top of the rest of the content. Essentially a DialogFragment displays a Dialog but inside a Fragment.


4 Answers

You can show your DialogFragment like this:

void showDialog() {     DialogFragment newFragment = MyAlertDialogFragment.newInstance(             R.string.alert_dialog_two_buttons_title);     newFragment.show(getFragmentManager(), "dialog"); } 

In you fragment dialog you should override onCreateDialog and return you instance of simple Dialog, for example AlertDialog.

public static class MyAlertDialogFragment extends DialogFragment {  public static MyAlertDialogFragment newInstance(int title) {     MyAlertDialogFragment frag = new MyAlertDialogFragment();     Bundle args = new Bundle();     args.putInt("title", title);     frag.setArguments(args);     return frag; }  @Override public Dialog onCreateDialog(Bundle savedInstanceState) {     int title = getArguments().getInt("title");      AlertDialog.Builder builder = new Builder(this);     return builder                 .setMessage("Are you sure you want to reset the count?")                 .setNegativeButton("No", new DialogInterface.OnClickListener() {                          @Override                     public void onClick(DialogInterface arg0, int arg1) {                         Toast.makeText(MainActivity.this, "Did not reset!", 5).show();                      }                 })                  .setPositiveButton("Yes", new DialogInterface.OnClickListener() {                       @Override                     public void onClick(DialogInterface arg0, int arg1) {                         Toast.makeText(MainActivity.this, "Did Reset!", 5).show();                      }                 })                 .create(); } } 
like image 190
HotIceCream Avatar answered Nov 08 '22 18:11

HotIceCream


Alert with custom view

public class MyAlertDialogFragment extends DialogFragment {      public static final String TITLE = "dataKey";      public static MyAlertDialogFragment newInstance(String dataToShow) {         MyAlertDialogFragment frag = new MyAlertDialogFragment();         Bundle args = new Bundle();         args.putString(TITLE, dataToShow);         frag.setArguments(args);         return frag;     }      @Override     public Dialog onCreateDialog(Bundle savedInstanceState) {         String mDataRecieved = getArguments().getString(TITLE,"defaultTitle");          AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());         LayoutInflater inflater = getActivity().getLayoutInflater();         View view = inflater.inflate(R.layout.alert_layout, null);          TextView mTextView = (TextView) view.findViewById(R.id.textview);         mTextView.setText(mDataRecieved);         setCancelable(false);          builder.setView(view);         Dialog dialog = builder.create();          dialog.getWindow().setBackgroundDrawable(                 new ColorDrawable(Color.TRANSPARENT));          return dialog;      } } 

And Alert with YesNoDialog interface

public class MyAlertDialogFragment extends DialogFragment {      public static final String TITLE = "dataKey";     private OnYesNoClick yesNoClick;      public static MyAlertDialogFragment newInstance(String dataToShow ) {         MyAlertDialogFragment frag = new MyAlertDialogFragment();         Bundle args = new Bundle();         args.putString(TITLE, dataToShow);         frag.setArguments(args);         return frag;     }      public void setOnYesNoClick(OnYesNoClick yesNoClick) {         this.yesNoClick = yesNoClick;     }      @Override     public Dialog onCreateDialog(Bundle savedInstanceState) {         String mDataRecieved = getArguments().getString(TITLE,"defaultTitle");          AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());          builder                 .setMessage("Message to Show")                 .setNegativeButton("No", new DialogInterface.OnClickListener() {                      @Override                     public void onClick(DialogInterface arg0, int arg1) {                         if(yesNoClick != null)                             yesNoClick.onNoClicked();                     }                 })                  .setPositiveButton("Yes", new DialogInterface.OnClickListener() {                      @Override                     public void onClick(DialogInterface arg0, int arg1) {                         if(yesNoClick != null)                             yesNoClick.onYesClicked();                     }                 });         Dialog dialog = builder.create();          dialog.getWindow().setBackgroundDrawable(                 new ColorDrawable(Color.TRANSPARENT));          return dialog;      }      public interface OnYesNoClick{         void onYesClicked();         void onNoClicked();     } } 

Use it like

private void showYesNoDialog(){         MyAlertDialogFragment yesNoAlert = MyAlertDialogFragment.newInstance(                 "Data to Send");         yesNoAlert.show(getFragmentManager(), "yesNoAlert");          yesNoAlert.setOnYesNoClick(new MyAlertDialogFragment.OnYesNoClick() {             @Override             public void onYesClicked() {                 //yes or ok clicked             }              @Override             public void onNoClicked() {                 //no or cancel clicked             }         });     } 
like image 33
Zar E Ahmer Avatar answered Nov 08 '22 19:11

Zar E Ahmer


Example of DialogFragment using Sherlock

FragmentManager fm = getSherlockActivity().getSupportFragmentManager();
DialogFragment dialog = new DialogFragment(){
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder
            .setTitle(getString(R.string.delete)+"?")
            .setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                // do something
                }
            })
            .setNegativeButton(getString(android.R.string.cancel),  new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dismiss();
                }
            });
        // Create the AlertDialog object and return it
        return builder.create();
    }
};
dialog.setCancelable(true);
dialog.show(fm, "DELETE_DIALOG_FRAGMENT");
like image 24
iflorit Avatar answered Nov 08 '22 18:11

iflorit


You can show the dialog like this:

new AlertDialog.Builder(this)
.setMessage("Are you sure you want to reset the count?")
.setNegativeButton("No", new DialogInterface.OnClickListener() {    

    @Override
    public void onClick(DialogInterface arg0, int arg1) {
        Toast.makeText(MainActivity.this, "Did not reset!", 5).show();
    }
})
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface arg0, int arg1) {
        Toast.makeText(MainActivity.this, "Did Reset!", 5).show();

    }
})
.create().show();
like image 35
Sapan Diwakar Avatar answered Nov 08 '22 17:11

Sapan Diwakar