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();
}
});
本当に手がかりはありませんが、何が悪いのでしょう。どんな助けでも大歓迎です。
AndroidXへの移行時に変更するビルドアーティファクトが多数あるため、この問題はAndroidXへの移行時に発生するようです。
例えば:
Android.support.v4.widget.SwipeRefreshLayout
=>に変更されましたandroidx.swiperefreshlayout.widget.SwipeRefreshLayout
AndroidXへの移行 にリストされているすべてのビルドアーティファクトを更新する必要があります
この同じリンクで提案されているように、メニューバーからRefactor> Migrate to AndroidXを選択して、このプロセスを自動化できます。
追加情報-発生したエラー:
Android.support.constraint.ConstraintLayoutクラスのインフレート中にエラーが発生しました
要素WebViewはここでは許可されていません
AndroidXを使用しているため、XMLが間違ったバージョンのSwipeRefreshLayout
を参照しています
XMLをAndroid.support.v4.widget.SwipeRefreshLayout
からandroidx.swiperefreshlayout.widget.SwipeRefreshLayout
に変更します
AndroidXを使用してSwipeRefreshLayout
でスタックしました
AndroidXでSwipeRefreshLayout
のリファレンスを取得できませんでした
そこで、アプリレベルのGradleファイルにimplementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
依存関係を追加しました。
だから私の場合の解決策は、
アプリレベルで依存関係を追加build.gradleファイル
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
GradleはAndroidXである新しい依存関係を必要としています:
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
JavaクラスでSwipeRefreshLayoutを使用すると、次の行が表示されます:
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
XMLファイルでは、SwipeRefreshLayoutのタグを使用する必要があります。
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
@canerkaseler