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.
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.
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.
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.
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(); } }
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 } }); }
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");
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With