Как использовать фрагмент диалога? (ShowDialog устарел) Android

Я понимаю, что есть эта документация

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

Но, как новый ученик для Android / Java, нелегко понять объем кода, связанного с написанием простого диалогового окна предупреждения, которое появляется с двумя сообщениями (да / нет).

Вот код, который я имею в моем файле MainActivity:

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

Это моя попытка выполнить инструкции на сайте android: Основной файл действия:

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

Затем был создан класс MainDialog: (Я действительно потерял, как правильно это сделать или применить)

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

Я не уверен, должен ли я создать новый класс для фрагмента и как применить его к текущему диалоговому окну активности.

Вы можете показать свой DialogFragment следующим образом:

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

В диалоговом окне фрагмента вы должны переопределить onCreateDialog и вернуть вам экземпляр простого Dialog , например 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(); } } 

Предупреждение с пользовательским представлением

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

И оповещение с интерфейсом YesNoDialog

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

Используйте его как

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

Пример диалога с использованием Шерлока

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

Вы можете показать диалоговое окно следующим образом:

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