Intereting Posts
ScrollView автоматически прокручивает до выбираемого TextView Поле ввода HTML: автоматически отображает числовой метод ввода Дополнительные приложения для Android о распознавании речи не работают FragmentManager уже выполняет транзакции. Когда безопасно инициализировать пейджер после фиксации? Историческое распространение версий платформы Android Менеджер местоположения ProxmityAlert всегда говорит о вводе Сохранить выбранное состояние кнопки Android Обтекание длинного текста на Android Canvas Функция «Экономия заряда батареи» убивает мой музыкальный сервис Ошибка совпадения текстаInputLayout Как сделать 10-дюймовый планшетный компьютер совместимым с 7-дюймовым планшетом в Android Альтернатива библиотеке QR-ридеров zxing для Java / Android? SyncAdapter: создана учетная запись, requestSync ОК, но setSyncAutomatically не работает Как получить случайное значение из массива строк в android? Переопределение onContextItemSelected () в ActionBarSherlock

DialogFragments с устройствами api level <11

Я собираюсь сделать сотовый проект / fork обратно совместимым с 1.6+.

Основываясь на документации, предоставленной Google / Android, я решил собрать все свои фрагменты с помощью DialogFragment которые отлично DialogFragment для сотов … это дает мне гибкость, чтобы поместить что-либо в виде диалога или элемента «полный экран».

Теперь я включил комплект совместимости и переместил мои запросы на импорт и методы. Теперь, когда я нахожусь на 2.3, я пытаюсь запустить идентичные намерения, но я получаю эту проблему:

 java.lang.IllegalStateException: DialogFragment can not be attached to a container view 

Документация для DialogFragment предполагает, что она может выполняться как Fragment если вам не DialogFragment функции диалога / всплывающего окна.

Solutions Collecting From Web of "DialogFragments с устройствами api level <11"

Мне удалось исправить это правильно в DialogFragment.java пакета Compatibility Package:

Изменить строку 74: boolean mShowsDialog = false;

//mShowsDialog = mContainerId == 0; строки из строки 232: //mShowsDialog = mContainerId == 0;

Затем измените два метода show:

 public void show(FragmentManager manager, String tag) { this.setShowsDialog(true); FragmentTransaction ft = manager.beginTransaction(); ft.add(this, tag); ft.commit(); } // JavaDoc removed public int show(FragmentTransaction transaction, String tag) { this.setShowsDialog(true); transaction.add(this, tag); mRemoved = false; mBackStackId = transaction.commit(); return mBackStackId; } 

В основном, они писали в поддержку, но переключатель для переключения между диалогом / встроенным не работает.

Поэтому здесь мы по умолчанию вставляем, а затем устанавливаем для показа в виде диалогового окна перед тем, как мы его покажем.

У меня была та же проблема. Я не нашел «правильное» решение, но вы можете сделать то же самое, установив тему диалога в OnCreateDialog() . Установив тему в android.R.style.Theme_Holo_DialogWhenLarge диалог будет показан как диалог на больших и больших экранах, в то время как он будет показан как полноэкранное окно на маленьких и обычных экранах.

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_DialogWhenLarge); } 

Я использую дочерний класс DialogFragment и делаю этот трюк в работе onCreate (). Я вызываю setShowsDialog () до вызова функции onCreate () (в onAttachFragment () моей активности)

 public class DialogFragmentHosted extends DialogFragment { @Override public void onCreate(Bundle savedInstanceState) { boolean forceShowDialog = savedInstanceState==null; boolean showsDialog = getShowsDialog(); super.onCreate(savedInstanceState); if (forceShowDialog ) setShowsDialog(showsDialog); } } 

Вы можете использовать версию android.support.v4.app.DialogFragment, пожалуйста, проверьте здесь

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

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

Макет фрагмента должен был меняться, но он был быстрым и легким. Естественно, что можно определить фрагмент диалога в XML и ожидать, что он будет внедрен без какой-либо дополнительной работы (как это подтверждают приведенные выше изменения в API совместимости); И ожидать только модальное поведение при вызове через show (). Я полагаю, что это не текущее поведение.