我已经搜索了问题的答案,如该问题的标题所示,并找到了Error inflating class androidx.constraintlayout.ConstraintLayout after migration to androidx,它与Migrating to AndroidX中提供的正式迁移说明一致。我将信息视为要求我将android.support.constraint.ConstraintLayout
更改为androidx.constraintlayout.widget.ConstraintLayout
,但这对我不起作用。
我没有找到有关放入gradle文件中的依赖项的任何信息,所以我尝试了一下(这是黑暗中的镜头):
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
这是可以接受的,但是当我尝试时:
implementation 'androidx.constraintlayout.widget:constraintlayout:1.1.3'
我得到 错误:无法解决:androidx.constraintlayout.widget:constraintlayout:1.1.3 ,所以我使用了以前的实现指令。
这是我的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.jbiss.petminder.activities.MainActivity">
<!--<android.support.v7.widget.Toolbar-->
<androidx.appcompat.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/colorPrimaryDark"
android:elevation="4dp"
app:layout_constraintTop_toTopOf="parent"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
<TextView
android:id="@+id/tvMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:accessibilityLiveRegion="assertive"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/my_toolbar"
tools:text="error message goes here"/>
<TextView
android:id="@+id/tvEmVet"
android:layout_width="wrap_content"
android:layout_height="44dp"
android:layout_marginBottom="8dp"
android:layout_marginStart="20dp"
android:layout_marginTop="8dp"
android:text="@string/emergency_vet"
android:textColor="@android:color/holo_red_dark"
android:textSize="24sp"
app:layout_constraintStart_toEndOf="@+id/phoneCallEmVet"
app:layout_constraintTop_toBottomOf="@+id/recyclerview1"
tools:textSize="24sp"/>
<ImageView
android:id="@+id/phoneCallEmVet"
android:layout_width="37dp"
android:layout_height="44dp"
android:layout_marginBottom="8dp"
android:layout_marginLeft="24dp"
android:layout_marginTop="8dp"
android:onClick="callEmVet"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recyclerview1"
app:srcCompat="@android:drawable/sym_action_call"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview1"
android:layout_width="368dp"
android:layout_height="365dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="@string/pet_name"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/my_toolbar"/>
</androidx.constraintlayout.widget.ConstraintLayout>
运行我的应用程序会产生以下错误:
2019-02-18 19:43:36.031 458-458/com.example.jbiss.petminder E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.jbiss.petminder, PID: 458
android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class android.support.constraint.ConstraintLayout
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.constraint.ConstraintLayout
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.constraint.ConstraintLayout" on path: DexPathList[[zip file "/data/app/com.example.jbiss.petminder-i-ubC_oLu_y7-aFpiqALqg==/base.apk", zip file "/data/app/com.example.jbiss
由于某些原因,遵循信息无效。迁移过程很艰难,但是我已经清理了很多问题,现在看来我已经完成了预期的工作,所以现在找不到原因。
答案 0 :(得分:2)
我解决了我的问题。我发现Androidx迁移比我最初想象的要复杂得多。知道我已经更新了初始屏幕中使用的XML文件中ConstraintLayout元素的标签,因此我使用Windows GREP在整个项目中搜索“ android.support.constraint.ConstraintLayout ”。瞧,我发现了丢失的实例,因此我将XML文件引用更新为“ androidx.constraintlayout.widget.ConstraintLayout ”。
这使我的项目得以成功构建并在模拟器上启动。但是,在尝试访问另一个屏幕后,出现了与我最初的帖子中所示相同的错误,但出现了AppBarLayout。因此,我必须像处理ConstraintLayout一样进行此操作,然后再进行其他操作。
如果您要迁移,请准备比预期多的工作!
答案 1 :(得分:2)
迁移到androidX后,我遇到了同样的问题。尝试以上解决方案。但是,它没有用。我在项目级应用程序gradle中添加了mavenCentral()。
repositories {
jcenter()
maven { url 'https://maven.google.com' }
mavenCentral()
}
进行以下更改
dependencies {
implementation 'com.google.android.material:material:1.0.0'
implementation "androidx.constraintlayout:constraintlayout:1.1.3"
}
使用“ androidx.constraintlayout.widget.ConstraintLayout”
更新了“ android.support.constraint.ConstraintLayout” xml标签最终成功了。
答案 2 :(得分:0)
如果像我一样使用“迁移到Androidx”工具后在Android Studio 3.6.3上遇到此问题,这对我有用:
我在布局XML文件中使用的是androidx.constraintlayout.ConstraintLayout
,而不是androidx.constraintlayout.widget.ConstraintLayout
区别是在ConstraintLayout之前有一个小部件。我的应用程序级别build.gradle中的依赖项为:
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
当时的最新消息。