web-dev-qa-db-ja.com

インフレーティングクラスAndroid.support.v4.widget.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();
        }
    });

本当に手がかりはありませんが、何が悪いのでしょう。どんな助けでも大歓迎です。

18

AndroidXへの移行時に変更するビルドアーティファクトが多数あるため、この問題はAndroidXへの移行時に発生するようです。

解決策1:手動で行う

例えば:

Android.support.v4.widget.SwipeRefreshLayout=>に変更されましたandroidx.swiperefreshlayout.widget.SwipeRefreshLayout

AndroidXへの移行 にリストされているすべてのビルドアーティファクトを更新する必要があります

解決策2:Android Studio 3.2+で自動化する

この同じリンクで提案されているように、メニューバーからRefactor> Migrate to AndroidXを選択して、このプロセスを自動化できます。


追加情報-発生したエラー:

Android.support.constraint.ConstraintLayoutクラスのインフレート中にエラーが発生しました

要素WebViewはここでは許可されていません

11
micaball

AndroidXを使用しているため、XMLが間違ったバージョンのSwipeRefreshLayoutを参照しています

XMLをAndroid.support.v4.widget.SwipeRefreshLayoutからandroidx.swiperefreshlayout.widget.SwipeRefreshLayoutに変更します

45
Pedro Oliveira

AndroidXを使用してSwipeRefreshLayoutでスタックしました

AndroidXSwipeRefreshLayoutのリファレンスを取得できませんでした

そこで、アプリレベルのGradleファイルにimplementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'依存関係を追加しました。

だから私の場合の解決策は、

アプリレベルで依存関係を追加build.gradleファイル

implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
37
Chirag Savsani

GradleはAndroidXである新しい依存関係を必要としています:

implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'

JavaクラスでSwipeRefreshLayoutを使用すると、次の行が表示されます:import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

XMLファイルでは、SwipeRefreshLayoutのタグを使用する必要があります。

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout

@canerkaseler

1
canerkaseler