ClassCastException ContentFrameLayout androidx против support.v7 в системном приложении - PullRequest
1 голос
/ 23 мая 2019

Странное исключение Я получаю системное приложение, когда использую только FrameLayout в моем SampleActivity.

Caused by: java.lang.ClassCastException: androidx.appcompat.widget.ContentFrameLayout cannot be cast to android.support.v7.widget.ContentFrameLayout
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:685)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:516)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:464)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
05-22 08:41:05.357 10520 10520 E AndroidRuntime: at com.sample.SampleActivity.onCreate(SampleActivity.java:98)

Итак, я посмотрел исходный код AppCompatDelegateImpl, представленный здесь: AppCompatDelegateImpl

импорт в SampleActivity.java:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

Хотя этот класс является частью android appcompat.v7, но он импортирует androidx.appcompat.widget.ContentFrameLayout Означает ли это, что appcompat.v7 внутренне использует зависимости androidx? Если да, то почему я получаю это исключение?

Примечание : Пожалуйста, избегайте решений на основе gradle, поскольку это системное приложение.

Ответы [ 3 ]

3 голосов
/ 22 июня 2019

Исправлено - включение зависимостей androidx в файл Android.mk.

Также пришлось изменить весь импорт классов поддержки библиотеки на androidx, как предложено на сайте разработчика Android: https://developer.android.com/jetpack/androidx/migrate

1 голос
/ 23 мая 2019

Перейдите к файлу gradle.properties и убедитесь, что

android.useAndroidX=false

Если для этого параметра установлено значение true , плагин Android будет использовать библиотеку AndroidX вместо библиотеки поддержки.,Кроме того, если вы не можете найти useAndroidX в gradle.properties , попробуйте добавить его и выполнить синхронизацию gradle.

0 голосов
/ 23 мая 2019

Обновление выписок по импорту. Вы используете класс с тем же именем, но из разных пакетов.

...