Ошибка: java.lang.Исключение ClassNotFoundException при раздувании табличного представления во фрагменте

#android #android-layout #android-tablayout

#Android #android-layout #android-tablayout

Вопрос:

Я получаю ошибку: java.lang.Исключение ClassNotFoundException всякий раз, когда Android пытается раздуть TabLayout в моем фрагменте. Я использую Kotlin, не уверен, имеет ли это значение или нет.

Мой макет фрагмента

 <LinearLayout android:layout_height="match_parent"
          android:layout_width="match_parent"
          android:orientation="vertical"
          xmlns:android="http://schemas.android.com/apk/res/android">

<!-- our tablayout to display tabs  -->
<android.support.design.widget.TabLayout
        android:id="@ id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

<!-- View pager to swipe views -->
<android.support.v4.view.ViewPager
        android:id="@ id/pager"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"/>
  

Мои зависимости от Gradle

 def room_version = "2.1.0-alpha04"

implementation "androidx.room:room-runtime:$room_version"
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
annotationProcessor "androidx.room:room-compiler:$room_version"
// For Kotlin use kapt instead of annotationProcessor

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0-alpha02'
implementation 'androidx.core:core-ktx:1.1.0-alpha04'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha02'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.2-alpha01'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.2-alpha01'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.android.support:support-compat:28.0.0'
implementation 'com.android.support:design:28.0.0'
  

и я получаю эту ошибку

 2019-03-07 10:05:12.020 29278-29278/com.nandrezholdingslimited.pebblar E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nandrezholdingslimited.pebblar, PID: 29278
android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class android.support.design.widget.TabLayout
Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class android.support.design.widget.TabLayout
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.design.widget.TabLayout" on path: DexPathList[[zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/base.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_dependencies_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_resources_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_slice_0_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_slice_1_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_slice_2_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_slice_3_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_slice_4_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_slice_5_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_slice_6_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_slice_7_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_slice_8_apk.apk", zip file "/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.nandrezholdingslimited.pebblar-ZCiGV8uuN3ooM7_JoASOUg==/lib/arm64, /system/lib64, /system/vendor/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.view.LayoutInflater.createView(LayoutInflater.java:606)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at com.nandrezholdingslimited.pebblar.features.tripslist.TripsListFragment.onCreateView(TripsListFragment.kt:30)
  

Я читал из различных сообщений stackoverflow, что это может быть из-за проблем с несовместимостью версий библиотеки, но я перепробовал много разных версий, и я все еще получаю этот сбой всякий раз, когда Android пытается раздуть TabLayout во фрагмент.

Пожалуйста, помогите мне с этой проблемой.

Спасибо!

Комментарии:

1. вы уверены, что в папке .zip нет файла вашего проекта?

2. привет @Faisal, извините, я не понял, что вы имели в виду, говоря «в папке .zip нет файла вашего проекта»

3. Как сказано в вашем сообщении об ошибке: не найден класс «android.support.design.widget. TabLayout DexPathList[[zip-файл «бла-бла-бла»…….

4. Я создал другой пример проекта, разместив TabLayout внутри фрагмента, без сбоев в этом проекте, если я посмотрю app -> build -> outputs -> logs -> manifest-merger-debug-report.txt выполнив поиск по ключевому слову com.android.support: дизайн: 28.0.0, я смог найти несколько записей. Но для проекта, который выходит из строя, я не смог найти com.android.support: дизайн: 28.0.0 в manifest-merger-debug-report.txt

5. Я смог углубиться в проблему, если создам новый проект с использованием Android Studio и поставлю галочку «Использовать артефакты AndroidX» и добавлю реализацию ‘com.android.support: дизайн: 28.0.0’, manifest-merger-debug-report.txt НЕ будет отображаться, что библиотека дизайна была объединена. Если я НЕ отмечу Использовать артефакты AndroidX, manifest-merger-debug-report.txt Покажет, что библиотека дизайна была объединена.

Ответ №1:

Хорошо, я знаю, в чем проблема.

Если я выберу «Использовать артефакты AndroidX» при создании нового проекта, то мне придется использовать

 implementation 'com.google.android.material:material:1.1.0-alpha04'
  

и

 com.google.android.material.tabs.TabLayout
  

Если я использую

 implementation 'com.android.support:design:28.0.0'
  

и

android.support.design.widget.TabLayout

приложение завершит работу во время раздувания TabLayout.

Принимая во внимание, что если я не выбрал «Использовать артефакт AndroidX», я могу использовать 'com.android.support:design:28.0.0' без каких-либо проблем.