膨胀类android.support.v4.widget.SwipeRefreshLayout

时间:2019-02-28 18:46:20

标签: android swiperefreshlayout

我正在尝试在片段中实现SwipeRefreshLayout。它看起来创建正确,但是我继续收到错误:

Caused by: android.view.InflateException: Binary XML file line #2: 
Binary XML file line #2: Error inflating class 
android.support.v4.widget.SwipeRefreshLayout
Caused by: android.view.InflateException: Binary XML file line #2: 
Error inflating class android.support.v4.widget.SwipeRefreshLayout
Caused by: java.lang.ClassNotFoundException: Didn't find class 
"android.support.v4.widget.SwipeRefreshLayout" on path: 
DexPathList[[zip file "/data/app/com.weather.rainy- 
2/base.apk"],nativeLibraryDirectories=[/data/app/com.weather.rainy- 
2/lib/x86, /system/lib, /vendor/lib]]

我真的不知道是什么原因造成的。

我用于实现SwipeRefreshLayout的片段布局:

    <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/swipeToRefresh4Maps"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/topRL4Maps"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg_gradient_purple"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingTop="64dp"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingBottom="64dp"
        tools:context="com.weather.rainy.ui.MapsActivity">

        <TextView
            android:id="@+id/yourLocationLabelTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="15dp"
            android:text="@+string/your_location"
            android:textColor="@android:color/white"
            android:textSize="24sp" />

        <fragment
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/addressValueTextView"
            android:layout_alignBottom="@+id/addressValueTextView"
            android:layout_below="@+id/yourLocationLabelTextView"
            android:layout_centerHorizontal="true"
            android:layout_margin="15dp"
            tools:context="com.weather.rainy.ui.MapsActivity" />

        <TextView
            android:id="@+id/addressValueTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/map"
            android:layout_alignEnd="@+id/map"
            android:layout_alignParentStart="false"
            android:layout_alignParentBottom="true"
            android:text="@+string/..."
            android:textColor="#aaffffff"
            android:textSize="18sp" />
    </RelativeLayout>
</android.support.v4.widget.SwipeRefreshLayout>

而且,我的片段类用于调用SwipeRefreshLayout:

  //Code for Swipe Refresh
    mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeToRefresh4Maps);
    mSwipeRefreshLayout.setColorSchemeResources(R.color.Red, R.color.Orange, R.color.Blue, R.color.Green);
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            Log.v(TAG, "************** MAPS - SWIPE REFRESH EVENT TRIGGERED!!!!!");
            findLocation();
        }
    });

我真的没有任何线索,这是怎么回事。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:25)

我使用 AndroidX

被困在SwipeRefreshLayout

我无法在 AndroidX

中获得SwipeRefreshLayout的引用

所以我添加了implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0' 应用程序级别gradle文件中的依赖性。

所以在我的情况下,解决方法是

在应用程序级别 build.gradle 文件

中添加依赖项
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'

答案 1 :(得分:8)

由于您使用的是AndroidX,因此您的XML引用了错误的SwipeRefreshLayout版本

将您的XML从android.support.v4.widget.SwipeRefreshLayout更改为androidx.swiperefreshlayout.widget.SwipeRefreshLayout

答案 2 :(得分:8)

Gradle需要新的依赖关系,即AndroidX:

implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'

如果在Java类中使用SwipeRefreshLayout,则可以看到以下行: import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

在XML文件中,您应该使用SwipeRefreshLayout的标记:

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout

@canerkaseler

答案 3 :(得分:6)

迁移到AndroidX时似乎会发生此问题,因为迁移到AndroidX时需要更改许多构建工件。

解决方案1:手动完成

例如:

android.support.v4.widget.SwipeRefreshLayout 已更改为=> androidx.swiperefreshlayout.widget.SwipeRefreshLayout

您必须更新Migrating to AndroidX

中列出的所有构建工件。

解决方案2:在Android Studio 3.2+上自动化

如在同一链接中所建议,您可以通过从菜单栏中选择重构>迁移到AndroidX 来自动执行此过程。


  

附加信息-我遇到的错误:

     

膨胀类android.support.constraint.ConstraintLayout的错误

     

此处不允许使用元素WebView

答案 4 :(得分:-1)

将android.support.v4.widget.SwipeRefreshLayout替换为Android x