J'essaie d'implémenter SwipeRefreshLayout en fragments. Il semble créé correctement, mais je continue à obtenir les erreurs:
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]]
Je n'ai vraiment aucune idée de ce qui cause cela.
Ma disposition de fragment pour implémenter 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>
Et, ma classe de fragment pour appeler le 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();
}
});
Je n'ai vraiment aucune idée, quel est le problème. Toute aide est grandement appréciée.
Ce problème semble se produire lors de la migration vers AndroidX car de nombreux artefacts de construction doivent être modifiés lors de la migration vers AndroidX.
Par exemple:
Android.support.v4.widget.SwipeRefreshLayout
remplacé par => androidx.swiperefreshlayout.widget.SwipeRefreshLayout
Vous devez mettre à jour tous les artefacts de construction répertoriés dans Migration vers AndroidX
Comme suggéré dans ce même lien, vous pouvez automatiser ce processus en sélectionnant Refactor> Migrer vers AndroidX dans la barre de menus.
INFOS SUPPLÉMENTAIRES - Les erreurs que j'ai eues:
Erreur lors du gonflement de la classe Android.support.constraint.ConstraintLayout
l'élément WebView n'est pas autorisé ici
Parce que vous utilisez AndroidX, votre XML fait référence à la mauvaise version de SwipeRefreshLayout
Changement dans votre XML de Android.support.v4.widget.SwipeRefreshLayout
à androidx.swiperefreshlayout.widget.SwipeRefreshLayout
J'étais coincé sur le SwipeRefreshLayout
en utilisant AndroidX
Je n'ai pas pu obtenir la référence de SwipeRefreshLayout
dans AndroidX
J'ai donc ajouté implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
dépendance dans le fichier gradle au niveau de l'application.
Donc, dans mon cas, la solution est,
Ajouter la dépendance au niveau de l'application fichier build.gradle
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
Gradle a besoin d'une nouvelle dépendance qui est AndroidX:
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'
Si vous utilisez SwipeRefreshLayout dans Java, vous pouvez voir cette ligne:
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
Dans votre temps XML, vous devez utiliser les balises de SwipeRefreshLayout:
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
@canerkaseler