Как использовать fragment диалога? (showDialog устарел) Android

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

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

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

Вот код, который я имею в моем файле 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; }; 

Затем был создан class 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; } } 

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

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

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

В диалоговом окне fragmentа вы должны переопределить 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(); 
  • как сделать конкретный текст в TextView BOLD
  • URI из Intent.ACTION_GET_CONTENT в файл
  • Как начать новую активность при нажатии кнопки
  • Диалог для выбора изображения из галереи или с камеры
  • Android: Могу ли я включить / отключить фильтр намерений активности программно?
  • Символы Unicode, не отображаемые в TextView.setText
  • Как сделать снимок экрана текущей активности, а затем поделиться ею?
  • Ошибка: (23, 17) Не удалось выполнить: junit: junit: 4.12
  • Geocoder.getFromLocation бросает IOException на эмулятор Android
  • Отображение текущего времени и даты в приложении для Android
  • Android: загрузка изображения из Интернета с помощью Asynctask
  • Interesting Posts

    Как удалить несколько строк в Entity Framework (без foreach)

    Расшифровка трафика SSL в Wireshark. Только заголовки получают расшифровку

    Создавать события календаря Google из таблицы, но не допускать дублирования

    Разбор JSON DateTime от JSON Serializer от Newtonsoft

    Разница между загрузкой classа с использованием ClassLoader и Class.forName

    Перемещение скрытых файлов / папок с помощью командной строки или пакетного файла

    Express.js req.body undefined

    Каковы различия между различными методами сохранения в Hibernate?

    Как ввести регистрационную информацию для веб-сайта из командной строки linux

    Firefox на Ubuntu не может подключиться к локальному виртуальному хосту, когда сеть отключена

    База данных с предварительным заполнением Android

    Что такое «с (nolock)» в SQL Server?

    Является ли C строго типизированным?

    Как получить квадратный корень для 32-битного ввода только за один такт?

    Что вызывает java.lang.IncompatibleClassChangeError?

    Давайте будем гением компьютера.