Intereting Posts
Запуск / остановка встроенного Wi-Fi / USB-подключения от кода? Как я могу автоматически очищать вывод logcat перед каждым запуском в Android Studio? Построение RatingBar с использованием изображений, загруженных из Интернета. Как просмотреть все действия, открытые приложением? Как я могу разблокировать экран во время отладки USB? Веб-приложение HTML5 против собственных мобильных приложений Объект refrence не установлен в экземпляр объекта Когда я создаю новое приложение для Android (Visual Studio) Android Espresso – Как проверить подсказку EditText? EGL против GLES 2.0 на Android (например, Java) Внедрение масштабирования и перетаскивания с использованием сборки Android в прослушивании жестов и прослушивании шкалы Показывать ProgressBar в течение определенного времени в Android Сенсорное обнаружение на полилинии в Google Maps API Android v2 Могу ли я использовать tcpdump для получения HTTP-запросов, заголовка ответа и тела ответа? Ошибка сборки Android Studio 1.0RC4 Gradle Как изменить цвет текста прядильщика

Диалоговый фрагмент без FragmentActivity

Можно ли использовать DialogFragment при использовании Activity вместо FragmentActivity ? Для методов show() требуется FragmentManager .

Я хочу реализовать Dialog, который содержит только один EditText , а в учебниках по разработчикам Android говорится, что я должен использовать собственный макет для фрагмента диалога. Поэтому я спросил, почему я не хочу менять FragmentActivity только для 1 диалога.

SOLVED: Я решил просто использовать FragmentActivity вместо Activity поэтому он не станет более сложным.

Solutions Collecting From Web of "Диалоговый фрагмент без FragmentActivity"

Я столкнулся с той же проблемой. Я знаю, что вы спросили об этом год назад, но по-прежнему помогать другим пользователям. Вот как я решил проблему.

 public void show_dialog() { FragmentManager fm = getFragmentManager(); DialogFragment newFragment = new DialogFragment(); newFragment.show(fm, "abc"); } 

Для этого требуется импорт FragmentManager, а не FragmentActivity.

Может быть, немного поздно, но у меня также возникла проблема вызвать DialogFragment из не FragmentActivity. Также сделать это FragmentActivity просто для простого диалога не имеет смысла. Таким образом, решение для меня заключалось в том, чтобы создать интерфейс с обратным вызовом, чтобы получить ответ DialogFragment в действии. Для меня лучше получить ответ рядом с диалоговым вызовом, а не получать его где-нибудь в переопределении onActivityResult.

Интерфейс:

  import android.os.Parcelable; /** * Created by TH on 03.11.2015. */ public interface OnDialogResponseListener extends Parcelable { void onDialogResponse(int responseCode); } 

Общий класс диалога:

 import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; /** * Code basisc found here: * http://stackoverflow.com/questions/7977392/android-dialogfragment-vs-dialog * changed by TH on 03.11.2015. */ public class YesNoDialog extends DialogFragment { public static final String TITLE="title"; public static final String MESSAGE="message"; public static final String LISTENER="listener"; public static final String YES="yes"; public static final String NO="no"; public static final String ICON_ID="icon_id"; private OnDialogResponseListener mResponseListener; public YesNoDialog() { } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Bundle args = getArguments(); String title = args.getString(TITLE, ""); String message = args.getString(MESSAGE, ""); String yes = args.getString(YES, ""); String no = args.getString(NO, ""); int iconID=args.getInt(ICON_ID); mResponseListener=args.getParcelable(LISTENER); return new AlertDialog.Builder(getActivity()) .setTitle(title) .setMessage(message) .setIcon(iconID) .setPositiveButton(yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (mResponseListener != null) { mResponseListener.onDialogResponse(Activity.RESULT_OK); } } }) .setNegativeButton(no, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (mResponseListener != null) { mResponseListener.onDialogResponse(Activity.RESULT_CANCELED); } } }) .create(); } } 

И использование будет таким:

 OnDialogResponseListener onDialogResponseListener=new OnDialogResponseListener() { @Override public int describeContents() { return 0; //Leave this as it is } @Override public void writeToParcel(Parcel dest, int flags) { //Leave this as it is } @Override public void onDialogResponse(int responseCode) { //Do what you want with your dialog answers if(responseCode== Activity.RESULT_OK){ Toast.makeText(MovementActivity.this,"OK pressed",Toast.LENGTH_LONG).show(); }else if(responseCode==Activity.RESULT_CANCELED){ Toast.makeText(MovementActivity.this,"CANCEL pressed",Toast.LENGTH_LONG).show(); } } }; YesNoDialog dialog = new YesNoDialog(); Bundle args = new Bundle(); args.putInt(YesNoDialog.ICON_ID, R.drawable.ic_action_add_light); args.putString(YesNoDialog.YES, getString(R.string.action_add)); args.putString(YesNoDialog.NO, getString(R.string.action_cancel)); args.putString(YesNoDialog.TITLE, getString(R.string.dialog_title_add_item)); args.putString(YesNoDialog.MESSAGE, getString(R.string.dialog_message_add_item)); args.putParcelable(YesNoDialog.LISTENER, onDialogResponseListener); dialog.setArguments(args); dialog.show(getSupportFragmentManager(), "tag"); 

Вот и все. Может быть, немного больше кода, чем в simle Dialog, но он сохраняет свои значения и показывает изменения ориентации. Это была моя цель использовать DialogFragment.

Если вам нужен всеобъемлющий диалог для всех ваших фрагментов, просто используйте обычный код диалога для действий с активностью фрагмента. В противном случае просто выполните его в диалоговом окне «Диалог» в качестве дочернего элемента «Фрагментная активность».

У меня была такая же проблема, но мне удалось исправить ее с помощью ответов в столбце переполнения, связанного ниже. Мне особенно понравилось решение mrolcsi с концепцией приемника положительного / отрицательного результата, который дал мне очень аккуратный результат.

Получить значение от DialogFragment