Как использовать fragment диалога? (showDialog устарел) Android
Я понимаю, что есть эта документация
http://developer.android.com/reference/android/app/DialogFragment.html#AlertDialog
но как новый ученик для Android / Java нелегко понять объем кода, связанного с написанием простого диалогового windows предупреждения, которое появляется с двумя сообщениями (да / нет).
- Полноэкранное фоновое изображение в действии
- Возможно ли запустить одновременно несколько AsyncTask?
- Где я могу разместить папку «assets» в Android Studio?
- Как вы используете Android Volley API?
- AlertDialog изнутри BroadcastReceiver ?? Это можно сделать?
Вот код, который я имею в моем файле 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а и как применить его к текущему диалоговому окну активности.
- Ввод плотности экрана в правильное ведро
- Связывание FirebaseRecyclerViewAdapter с булевой / строковой картой.
- Android Alternate row Colors в ListView
- Как определить, когда телефон отвечает или отклонен
- как перетащить изображение, прикоснувшись к андроиду?
- Только макет загрузки, когда звонки с помощью колоды
- Программно добавить один вид ниже другого в относительной компоновке
- Неполадка контекста ошибки сборки IntelliJ
Вы можете показать свой 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();