web-dev-qa-db-fra.com

Gonflage de classe Android.support.v4.widget.SwipeRefreshLayout

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.

18
Muhammed Hanifi Alma

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.

Solution 1: faites-le manuellement

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

Solution 2: automatiser sur Android Studio 3.2+

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

11
micaball

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

45
Pedro Oliveira

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'
37
Chirag Savsani

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

1
canerkaseler