Android предварительный просмотр студии не показан - PullRequest
3 голосов
/ 13 марта 2020

Не удалось создать экземпляры следующих классов: androidx.fragment.app.FragmentContainerView (Открытый класс, Показать исключение, Очистить кэш)

Совет: Используйте View.isInEditMode() в пользовательских представлениях, чтобы пропустить код или показать образцы данных когда показано в IDE. Если это непредвиденная ошибка, вы также можете попытаться построить проект, а затем вручную обновить sh макет.

Сведения об исключении:

java.lang.UnsupportedOperationException: FragmentContainerView must be within a FragmentActivity to be instantiated from XML. 
    at androidx.fragment.app.FragmentContainerView.<init>(FragmentContainerView.java:117) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)  
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1123)  
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:1097)  
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:682)  
    at android.view.LayoutInflater.inflate(LayoutInflater.java:501)

Это сообщение было показано, и предварительный просмотр макета не был показан в базовом c действии, или другой шаблон принимает пустое действие.

Перед этим сообщением было показано одно сообщение о замене тега фрагмента на fragmentcontainerview. Я исправил это, и затем было показано выше сообщение. Я пробовал известные решения, такие как перестройка, перекомпоновка sh макета и аннулирование кэшей / перезапуск и т. Д. c, но они не сработали.

Ответы [ 2 ]

2 голосов
/ 16 марта 2020

Сегодня сталкивался с той же проблемой. Проверьте это: https://developer.android.com/jetpack/androidx/releases/fragment#1 .3.0-alpha01 .

Они заметили эту проблему и выпустили более новую версию, которая исправляет эту ошибку.

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

Обновление :

Чтобы использовать библиотеку или указать конкретную c версию библиотеки:

открыть файл build .gradle (Модуль: приложение) , добавьте следующую строку в раздел зависимость :

implementation '[library_name]:[version]'

Например, если вы хотите использовать версию 1.3.0-alpha01 из библиотеку фрагментов, добавьте эту строку:

implementation 'androidx.fragment:fragment:1.3.0-alpha01'

Если вы хотите найти имя каждой библиотеки, проверьте это: https://developer.android.com/jetpack/androidx/migrate/artifact-mappings

Найти текущий выпуск и последнее обновление библиотек: https://developer.android.com/jetpack/androidx/versions/

1 голос
/ 13 марта 2020

Если вы посмотрите на исходный код FragmentContainerView, вы увидите следующее:

/**
 * Do not call this constructor directly. Doing so will result in an
 * {@link UnsupportedOperationException}.
 */
public FragmentContainerView(@NonNull Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    throw new UnsupportedOperationException("FragmentContainerView must be within a "
            + "FragmentActivity to be instantiated from XML.");
}

К сожалению, это конструктор, который вызывает предварительный просмотр макета. Похоже, что вы ничего не можете сделать с этой ошибкой, пока команда Android Studio не исправит эту проблему.


Это конструктор, который система "должна" использовать:

FragmentContainerView(Context context, AttributeSet attrs, FragmentManager fm) {
    // ...
}

Если вы действительно запускаете свое приложение, оно должно быть вызвано, и все должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...