#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'
без каких-либо проблем.