10
votes

Classe non trouvée lors de la montagne: android.support.v7.widget.toolbar $ sauvédstate

J'utilise des cartes Maps pour créer une application Android simple et je reçois une erreur bizarre que je ne peux pas résoudre. Il arrive généralement lorsque je fais pivoter mon appareil. J'utilise Google Services 8.4.0

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    android:background="?attr/colorPrimary"
    android:id="@+id/toolbar"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
     android:minHeight="?attr/actionBarSize"
    android:layout_width="match_parent"
    android:layout_alignParentStart="true"
    android:elevation="4dp"
    app:popupTheme="@style/AppTheme.PopupOverlay"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
</android.support.v7.widget.Toolbar>


4 commentaires

Je suppose que c'est parce que vous avez la barre d'outils imbriquée dans la carte fragment , qui est inhabituel. Essayez de tirer le hors du et mettez-les à la fois dans un autre groupe de vue ; E.G., un linearlayout ou un relativelayoutout .


@Mikem. Merci. Mettre les deux dans une relativation fonctionne comme un charme. Vous devriez poster cela comme une réponse pour que je puisse l'accepter.


Quelle est la version Android? Cela ne s'est passé que dans l'API 10. Parce que j'ai déjà eu cette erreur et je ne suis toujours pas corrigé.


J'utilisais API 23, la solution de Mike a travaillé.


4 Réponses :


10
votes

Lors de la rotation, votre supportfragment est détruit et recréé. Avant de les détruire, il écrit son état actuel à un colis , à utiliser pour restaurer son état lorsqu'il est recréé. L'état enregistré fragment inclura l'état de son enfant Affichage S, et puisque vous avez nié une barre d'outils dans laquelle elle tente pour sauver et restaurer cela aussi. La classe d'outils ne dispose pas d'une classe interne sauvegardée nécessaire pour cela, ce processus échoue lorsque vous essayez de restaurer la barre d'outils à partir du Colis .

La solution consiste à ne pas nier la barre d'outils - ou tout autre , pour cette affaire - dans le élément. Au lieu de cela, tirez le hors du et mettez-les à la fois dans un autre groupe de vue ; Par exemple, un linearlayout vertical ou un relativelayoutout .


0 commentaires

3
votes

changer d'activité_map.xml à cela a fonctionné, merci encore Mike.

<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />

    <fragment xmlns:map="http://schemas.android.com/apk/res-auto"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </fragment>
</RelativeLayout>


0 commentaires

11
votes

Je n'ai pas aimé avoir fourni des solutions telles que l'imposition sur mes mises en page et mon architecture.

Voici ce que j'ai fait pour le faire fonctionner. Si vous regardez votre stackTrace, la classe NoteNotFoundException provient de la ligne sur Googlemaps. Donc, si nous résolvons cela, la question est partie. P>

Googlemaps Pukes / Jetez une erreur lorsque le sauvegardé -stansetate a d'autres éléments de celui-ci en plus de sa propre. La solution consiste à donner des googlemaps à son propre paquet dédié. P>

// class property
private static final String KEY_MAP_SAVED_STATE = "mapState";

// class methods
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mapView = findMapView();  // make your own method here
    Bundle mapState = (savedInstanceState != null)
            ? savedInstanceState.getBundle(KEY_MAP_SAVED_STATE): null;
    mapView.onCreate(mapState);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Bundle mapState = new Bundle();
    mapView.onSaveInstanceState(mapState);
    outState.putBundle(KEY_MAP_SAVED_STATE, mapState);
}


2 commentaires

D'accord. J'ai le même problème, mais dans ce cas, la défaillance est causée par: android.os.badparcelableException: classnotfoundexception lors de la mise à jour: android.support.v7.widget.recyClerview $ sauvéState . Mon RecyclerVoir est déjà arrivé sur un , la réponse marquée ne résoudrait pas à mon problème, mais cela fait.


Cela a parfaitement fonctionné pour avoir sauvegarder mon problème avec une erreur de classnotfoundexception lors de la mise à la fois: Android.Support.v7.widget.RecyClerview $ Savedstate. +2 pour ne pas avoir besoin de changer mes mises en page.



3
votes

J'ai eu un problème similaire avec ma vue personnalisée et trouvé Cette solution. J'ai remarqué que ce crash s'est produit lorsque j'ai prolongé RecyclerView ou AppComPatspinner et nécessaire pour sauver l'état. Le crash se produira probablement pour d'autres points de vue aussi.

Fondamentalement, le crash est causé par un bogue en absachedstate comme mentionné ici . Et l'accident ne se produit que lorsque le constructeur du sauvegardé est appelé sans chargeur de classe. Il semblait que c'était une affaire ancienne, mais j'ai commencé à obtenir des rapports d'accident pour Android 9 et 10.

de sorte que le correctif devait changer: xxx

à : xxx

édition J'étais sur la bonne voie, mais je regardais alors un Code Android et a découvert qu'il existait un constructeur manquant qui a causé l'accident. J'ai donc eu le constructeur suivant pour le SavedState: xxx

et je devais ajouter ce qui suit: xxx

puis Je devais changer le créateur: xxx


0 commentaires