android.view.InflateException: file XML binario: errore durante il gonfiaggio del frammento di classe


152

Ho un errore molto frustrante che non posso spiegare. Ho creato un'applicazione Android che la utilizza Android AppCompatper renderla compatibile con le versioni precedenti. Ecco il mio file di layout attività principale:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!-- As the main content view, the view below consumes the entire
         space available using match_parent in both dimensions. -->
    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- android:layout_gravity="start" tells DrawerLayout to treat
         this as a sliding drawer on the left side for left-to-right
         languages and on the right side for right-to-left languages.
         If you're not building against API 17 or higher, use
         android:layout_gravity="left" instead. -->

    <!-- The drawer is given a fixed width in dp and extends the full height of
         the container. -->
    <fragment android:id="@+id/navigation_drawer"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:name="com.fragment.NavigationDrawerFragment" />

</android.support.v4.widget.DrawerLayout>

Ed ecco il codice principale della mia attività:

public class MainActivity extends ActionBarActivity {
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
   }
}

Il problema principale qui è: il codice sopra funziona senza problemi su quasi i dispositivi (dispositivo stimolato o alcuni dispositivi reali). Ma quando lo eseguo su Samsung S3. Si accorge di questo errore:

java.lang.RuntimeException: Unable to start activity ComponentInfo{view.MainActivity}: android.view.InflateException: Binary XML file line #25: Error inflating class fragment
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2081)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2106)
            at android.app.ActivityThread.access$700(ActivityThread.java:134)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1217)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4856)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class fragment
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:316)
            at android.app.Activity.setContentView(Activity.java:1901)
            at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:208)
            at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:111)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76)

Per favore, dimmi come risolvere l'errore, grazie :)


1
In questa riga stai ricevendo un'eccezione controlla se il nome della classe e il nome del pacchetto sono corretti o no..android: name = "com.hqt.hac.view.fragment.NavigationDrawerFragment"
kalyan pvs

1
ho controllato e questa classe è vera. posso compilare ed eseguire su alcuni dispositivi, ma non Samsung S3. penso che alcuni strani problemi qui :(
hqt

hai ragione se è in esecuzione su qualche dispositivo e non su s3 è un problema strano..il mio consiglio è una volta provare a usare sherlacFragment chek una volta ..
Kalyan PVS

Ho già risolto il problema qui: stackoverflow.com/a/33128448/4366715 .
daniel kilinskas,

1
Per coloro che stanno cercando di diagnosticare la causa di questo errore: le correzioni aneddotiche qui sono un'aringa rossa. Si è verificata un'eccezione precedente durante l'inflazione del frammento che non viene visualizzata nella traccia dello stack . Potrebbe essere qualsiasi cosa. Per risolvere il problema, devi scoprire qual è l'eccezione precedente. Per fare ciò, vedi la mia risposta o @ DaveHubbard.
LarsH,

Risposte:


126

Dopo molto tempo per il debug, ho risolto questo problema. (Anche se non riesco ancora a spiegare il perché). Che cambio proprietà android:namea class. (anche se sul documento Android, dicono che quelle proprietà sono uguali, ma funziona !!!)

Quindi, dovrebbe cambiare da:

 android:name="com.fragment.NavigationDrawerFragment"

per

class = "com.fragment.NavigationDrawerFragment"

Quindi, il nuovo layout dovrebbe essere:

<!-- As the main content view, the view below consumes the entire
     space available using match_parent in both dimensions. -->
<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<!-- android:layout_gravity="start" tells DrawerLayout to treat
     this as a sliding drawer on the left side for left-to-right
     languages and on the right side for right-to-left languages.
     If you're not building against API 17 or higher, use
     android:layout_gravity="left" instead. -->

<!-- The drawer is given a fixed width in dp and extends the full height of
     the container. -->
<fragment android:id="@+id/navigation_drawer"
    android:layout_width="@dimen/navigation_drawer_width"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    class = "com.fragment.NavigationDrawerFragment" />

Spero che questo aiuto :)


4
Ho riscontrato questo problema durante il tentativo di seguire il tutorial Android ufficiale. La tua correzione (cambiando android:idin class) ha funzionato per me. Ho anche avuto un avvertimento Lint al cambiamento Fragmenta fragment, che ho fatto.
Stevepastelan,

9
@DownVoter: questo errore è confuso. E fortunatamente trovo il modo di risolvere. Mi dispiace davvero se il mio post non è in grado di correggere il tuo errore perché non riesco a spiegare il perché. Ma penso che non dovrebbe ricevere un voto negativo. :)
hqt

2
Mi chiedo se hai avuto questo crash in modo affidabile senza cambiare da namea class, ho avuto alcuni utenti che hanno segnalato questo crash ma non riesco a riproporlo da solo!
Daniel Wilson,

8
Non funziona per me. Sono così stanco. 2 ore di sviluppo e non riesco a trovare il motivo per cui non funziona (riga di file XML binaria ... errore nel gonfiare il frammento di classe). Qualche idea ?
Cocorico,

32

Non sono riuscito a risolvere il mio problema utilizzando le risposte fornite. Finalmente ho cambiato questo:

<fragment
android:id="@+id/fragment_food_image_gallery"
android:name="ir.smartrestaurant.ui.fragment.ImageGalleryFragment"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout="@layout/fragment_image_gallery"
tools:layout="@layout/fragment_image_gallery" />

a questa :

<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="200dp" />

,

private void showGallery() {
    ImageGalleryFragment fragment = new ImageGalleryFragment()
    getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, fragment)
                .commit();
    }

e funziona.
Se lo stai usando all'interno di un frammento, usa getChildFragmentManager invece di getSupportFragmentManager .


31

TL / DR : si è verificata un'eccezione durante la creazione di un frammento a cui fa riferimento un XML di layout di livello superiore. Questa eccezione ha causato il fallimento dell'inflazione del layout di livello superiore, ma l'eccezione iniziale non è stata segnalata ; solo l'errore di gonfiaggio di livello superiore viene visualizzato nella traccia dello stack. Per trovare la causa principale, è necessario rilevare e registrare l'eccezione iniziale .


La causa iniziale dell'errore potrebbe essere un'ampia varietà di cose, motivo per cui ci sono così tante risposte diverse qui su ciò che ha risolto il problema per ogni persona. Per alcuni, aveva a che fare con i id, classo nameattributi. Per altri era a causa di un problema di autorizzazioni o di un'impostazione di compilazione. Per me, quelli non hanno risolto il problema; invece c'era una risorsa disegnabile che esisteva solo in drawable-ldrtl-xhdpi, anziché in un luogo applicabile comedrawable .

Ma quelli sono solo dettagli. Il problema generale è che il messaggio di errore che appare in logcat non descrive l'eccezione che ha avviato tutto. Quando un XML di layout di livello superiore fa riferimento a un frammento, onCreateView()viene chiamato il frammento . Quando si verifica un'eccezione in un frammentoonCreateView() (ad esempio mentre si gonfia l'XML di layout del frammento), si errore nell'inflazione dell'XML di layout di livello superiore. Questo fallimento dell'inflazione di livello superiore è ciò che viene segnalato come un'eccezione nei registri degli errori. Ma l'eccezione iniziale non sembra percorrere abbastanza bene la catena per essere segnalata.

Data questa situazione, la domanda è come esporre l'eccezione iniziale, quando non viene visualizzata nel registro degli errori.

La soluzione è piuttosto semplice: metti un blocco try/ catchattorno al contenuto del frammento onCreateView()e nel filecatch clausola, registra l'eccezione:

public View onCreateView(LayoutInflater inflater, ViewGroup contnr, Bundle savedInstSt) {
    try {
        mContentView = inflater.inflate(R.layout.device_detail_frag, null);
        // ... rest of body of onCreateView() ...
    } catch (Exception e) {
        Log.e(TAG, "onCreateView", e);
        throw e;
    }
}

Potrebbe non essere ovvio a quale classe di frammento onCreateView()fare questo, nel qual caso, farlo a ciascuna classe di frammento utilizzata nel layout che ha causato il problema. Ad esempio, nel caso del PO, il codice dell'app in cui si è verificata l'eccezione era

at android.app.Activity.setContentView(Activity.java:1901)

che è

   setContentView(R.layout.activity_main);

Quindi è necessario catturare le eccezioni in onCreateView() di tutti i frammenti a cui si fa riferimento nel layout activity_main.

Nel mio caso, l'eccezione della causa principale si è rivelata essere

Caused by: android.content.res.Resources$NotFoundException: Resource
   "com.example.myapp:drawable/details_view" (7f02006f)  is not a
   Drawable (color or path): TypedValue{t=0x1/d=0x7f02006f a=-1
   r=0x7f02006f}

Questa eccezione non è stata visualizzata nel registro degli errori fino a quando non l'ho rilevata onCreateView()e registrata esplicitamente. Una volta registrato, il problema era abbastanza facile da diagnosticare e risolvere (details_view.xml esisteva solo sotto la ldrtl-xhdpicartella, per qualche motivo). La chiave stava rilevando l'eccezione che era alla radice del problema e lo esponeva.

Non fa male farlo come una caldaia in tutti i onCreateView()metodi dei tuoi frammenti . Se è presente un'eccezione non rilevata, si bloccherà l'attività indipendentemente. L'unica differenza è che se catturi e accedi all'eccezione onCreateView(), non sarai al buio sul perché sia ​​successo.

PS Ho appena realizzato che questa risposta è correlata a @ DaveHubbard, ma utilizza un approccio diverso per trovare la causa principale (registrazione vs. debugger).


2
Probabilmente mi hai risparmiato ore di debug. Complimenti!
Szymon Sadło,

16

Ho avuto lo stesso problema, problema, ho provato tutte le risposte in questa discussione senza risultati. La mia soluzione era che non avevo aggiunto un ID nell'attività XML. Non pensavo che avrebbe avuto importanza, ma lo fece.

Quindi nell'attività XML avevo:

<fragment
    android:name="com.covle.hellocarson.SomeFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Ma avrei dovuto avere:

<fragment
    android:id="@+id/some_fragment"
    android:name="com.covle.hellocarson.SomeFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

Se qualcuno sarebbe felice di commentare il perché di questo, sono tutto orecchi, ad altri, spero che questo ti aiuti.


1
Grazie, ha funzionato per me. Ho omesso un ID da mesi, ma dopo alcune modifiche improvvise al layout ho iniziato ad avere questo crash. Android è strano.
erisco,

La tua risposta funziona per me. Mi chiedo solo perché suppongo di mettere l'attributo id quando non lo uso da nessuna parte. Mi spieghi?
Moshii,

12

Potrebbe non essere più necessario per te, ma se altri lettori lo trovano utile. Ho esattamente lo stesso android.view.InflateException:...Error inflating class fragment. Avevo incluso tutte le librerie giuste. Risolto aggiungendo un'ulteriore autorizzazione utente nel AndroidManifest.xmlfile, ad es<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

A proposito, stavo correndo Android Studio 0.8.9 on Ubuntu 12.04.


Ha funzionato per me! Molte grazie!
Dadan,

12

Ho lo stesso problema perché non ho implementato l'ascoltatore. Vedere il codice seguente con /*Add This!*/.

public class SomeActivity extends AppCompatActivity
        implements BlankFragment.OnFragmentInteractionListener /*Add this!*/ 
{
    @Override                                                  /*Add This!*/
    public void onFragmentInteraction(Uri uri){                /*Add This!*/
    }                                                          /*Add This!*/
}

Cordiali saluti, la mia classe di frammenti è qualcosa di simile al seguente:

public class SomeFragment extends Fragment {

    private OnFragmentInteractionListener mListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    public interface OnFragmentInteractionListener {
        public void onFragmentInteraction(Uri uri);
    }
}

Modificare:

Noto anche questo stesso messaggio di errore in altre circostanze quando c'è un'eccezione nella onCreatefunzione di Fragment. Ho qualcosa come il seguente:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_main, container, false);

    int ID = getArguments().getInt("val");

    return rootView;
} 

Poiché riutilizzo questo frammento, dimentico totalmente di impostare argomenti. Quindi il risultato di getArguments()è null. Ovviamente, ottengo nullun'eccezione puntatore qui. Ti suggerirò di tenere d'occhio anche errori come questo.


1
Grazie! Questo ha aiutato molto!
DLee,

8

NavigationDrawerFragment estende android.support.v4.app.Fragment? In altre parole, stai importando il pacchetto corretto?

import android.support.v4.app.Fragment;

6

Ho avuto anche questo problema. L'ho risolto sostituendo l'importazione in MainActivityeNavigationDrawerFragment

A partire dal

import android.app.Activity;
import android.app.ActionBar;

Per

import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;

Ho aggiornato MainActivityper estendere ActionBarActivityinvece di attività

public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks

Usa anche ActionBar actionBar = getSupportActionBar(); per ottenere ActionBar

E ho aggiornato la seguente funzione in NavigationDrawerFragment

private ActionBar getActionBar()
{
    return ((ActionBarActivity)getActivity()).getSupportActionBar();
}

Penso che questa sia la risposta giusta. Ma ho usato AppCompatActivity invece di ActionBarActivity (non deprecato) e non ho rimosso l'importazione android.app.ActionBar (come usa il metodo onAttach)
GramThanos,

6

ho affrontato questo problema e risolto utilizzando i seguenti codici. Stavo iniziando una transazione di frammento usando il gestore di childfragment.

disposizione:

                  <fragment
                    class="com.google.android.youtube.player.YouTubePlayerSupportFragment"
                    android:id="@+id/youtube_fragment"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>

è così che ho iniziato la transazione di frammenti:

   youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_fragment);

i seguenti codici spiegano come ho rimosso il frammento che è stato aggiunto usando childfragmentmanger.

@Override
    public void onDestroyView() {
        super.onDestroyView();

        youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_fragment);

        if (youTubePlayerFragment != null)
        {
            getChildFragmentManager().beginTransaction().remove(youTubePlayerFragment).commitAllowingStateLoss();
        }

        youTubePlayer = null;
    }

TY Ali. Mi hai salvato la giornata!
vm345,

Funziona bene. Grazie!
Polyariz,

4

Ho avuto problemi simili dentro e fuori. Il messaggio di errore spesso fornisce pochissimi dettagli, indipendentemente dalla causa effettiva. Ma ho trovato un modo per ottenere informazioni più utili. Si scopre che la classe interna Android 'LayoutInflater.java' (nel pacchetto android.view) ha un metodo 'infllate' che genera un'eccezione, ma non raccoglie i dettagli, quindi si perdono informazioni sulla causa.

Ho usato AndroidStudio e ho impostato un punto di interruzione nella riga 539 di LayoutInflator (nella versione in cui sto lavorando), che è la prima riga del blocco catch per un'eccezione generica in quel metodo 'infllate':

        } catch (Exception e) {
            InflateException ex = new InflateException(
                    parser.getPositionDescription()
                            + ": " + e.getMessage());
            ex.initCause(e);
            throw ex;

Se guardi 'e' nel debugger, vedrai un campo 'causa'. Può essere molto utile darti un suggerimento su ciò che è realmente accaduto. Ecco come, ad esempio, ho scoperto che il genitore di un frammento incluso deve avere un ID, anche se non utilizzato nel codice. O che un TextView ha avuto un problema con una dimensione.


3

Nel caso qualcuno ne avesse bisogno. Presupposti: telefono del dispositivo collegato al cavo USB e lettura IDE per avviare l'app. Vai al prompt dei comandi per determinare il problema: inserisci adb logcat

Quindi avvia l'app dall'IDE. Farai un'eccezione.

Nel mio caso: stavo distribuendo un'app Android della versione 2.3 su un dispositivo mobile che non supportava il widget "Spazio"


3

Questo problema si presenta quando si dispone di una classe personalizzata che estende una classe diversa (in questo caso una vista) e non importa tutti i costruttori richiesti dalla classe.

Ad esempio: classe pubblica CustomTextView estende TextView {}

Questa classe avrebbe 4 costruttori e se ti perdi qualcuno si schianterebbe. In effetti ho perso l'ultimo che è stato usato da Lollipop aggiunto quel costruttore e ha funzionato bene.


2

dobbiamo anche aggiungere il seguente in build.gradle (app)

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'

ogni volta che utilizziamo nuovi layout o nuove funzionalità di progettazione. spero che questo ti aiuti.


2

Come menzionato in un post precedente,
rinominare

android:name="com.fragment.NavigationDrawerFragment"

per

class = "com.fragment.NavigationDrawerFragment"

Tuttavia, non ha funzionato per me. Ho quindi usato il nome della classe senza la parte com.fragment e voilà ha funzionato. Quindi cambiarlo finalmente in

class = "NavigationDrawerFragment"

2

Dopo che nessuna delle risposte qui mi ha aiutato, ho scelto di eseguire l'app in modalità debug spostandomi su ogni riga di onCreateView nel mio frammento (NavigationDrawerFragment nel tuo caso). E ho notato che il frammento stava avendo difficoltà a gonfiarsi a causa di una NullPointerException. Per esempio

mySeekBar = (SeekBar) getActivity().findViewById(R.id.mySeekBar);
mySeekBar.setOnSeekBarChangeListener(this);

Qui mySeekBar è stato impostato su null (perché avevo perso l'aggiunta del controllo nel layout appropriato) e la riga successiva è entrata in NPE che è venuta fuori come InflateException. Inoltre, come suggerito sopra, rinomina android: name to class.

Questo problema può sorgere per vari motivi sopra menzionati. Vorrei raccomandare il flusso di debug riga per riga per sapere cosa non va.


E questo errore si stava verificando nel onCreateView()metodo di un frammento ?
LarsH,

1

Per alcuni di voi che non hanno ancora trovato una soluzione per questo, nel mio caso è successo perché avevo un problema con OOM (memoria esaurita). Questo può accadere quando ad esempio hai una perdita di memoria nella tua app quando la usi per molto tempo. Nella mia traccia dello stack, questo era il motivo principale.


1

Non so se questo aiuterà.

Ho avuto questo problema con un TextView che avevo nel layout che stavo cercando di gonfiare ( android.view.InflateException: riga di file XML binario # 45: errore nel gonfiare la classe TextView ).

Avevo impostato il seguente attributo XML android: textSize = "? Android: attr / textAppearanceLarge" che non consentiva di gonfiare il layout.

Non so esattamente perché, ( sono ancora un po 'nuovo su Android - meno di un anno di esperienza ), potrebbe avere qualcosa a che fare con la chiamata degli attributi di sistema, idk, tutto ciò che so è non appena ho usato semplicemente il vecchio @ dimen / md_text_16sp ( che è una mia abitudine ), problema risolto :)

Spero che questo ti aiuti...


Non avevo frammenti né attributi textSize per Android. Il mio errore era correlato a TextInputLayout con uno stile personalizzato che eredita TextAppearance.AppCompat anziché Widget.Design.TextInputLayout:. stackoverflow.com/questions/19874882/...
Junior Mayhé

1

Ho avuto questo su un dispositivo 4.4.2, ma 5+ andava bene. La causa: all'interno dell'inizializzazione di una vista personalizzata, stavo creando un TextView(Context context, AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes), che è API 21+.

Android Studio 2.1 non se ne lamenta, anche se è annotato TargetApi(21). Apparentemente, Android Studio 2.2 correggerà questo e lo mostrerà correttamente come un errore.

Spero che questo aiuti qualcuno.


1

Sono un po 'in ritardo alla festa, ma nessuna di queste risposte mi ha aiutato nel mio caso. Stavo usando mappa di Google come SupportMapFragment e PlaceAutocompleteFragment sia nella mia frammento. Come tutte le risposte hanno indicato il fatto che il problema è che SupportMapFragment è la mappa da ricreare e ridisegnare.

Ma ho anche avuto problemi con PlaceAutocompleteFragment. Quindi ecco la soluzione funzionante per coloro che si trovano ad affrontare questo problema a causa di SupportMapFragment e SupportMapFragment

 mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapFragment);
    FragmentManager fm = getChildFragmentManager();

    if (mapFragment == null) {
        mapFragment = SupportMapFragment.newInstance();
        fm.beginTransaction().replace(R.id.mapFragment, mapFragment).commit();
        fm.executePendingTransactions();
    }

    mapFragment.getMapAsync(this);

    //Global PlaceAutocompleteFragment autocompleteFragment;


    if (autocompleteFragment == null) {
        autocompleteFragment = (PlaceAutocompleteFragment) getActivity().getFragmentManager().findFragmentById(R.id.place_autoCompleteFragment);

    }

E in onDestroyView cancella SupportMapFragment e SupportMapFragment

@Override
public void onDestroyView() {
    super.onDestroyView();


    if (getActivity() != null) {
        Log.e("res","place dlted");
        android.app.FragmentManager fragmentManager = getActivity().getFragmentManager();
        android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.remove(autocompleteFragment);
        fragmentTransaction.commit();

        autocompleteFragment = null;
    }


}

1

Dopo un lungo periodo di tentativi, questo è il modo in cui ho risolto il problema dopo che nessuna delle risposte precedenti poteva farlo.

  1. Estendi la AppCompatActivitytua Mainattività anziché Activity.
  2. Aggiungi android:theme="@style/Theme.AppCompat.Light"al tuo <Activity..../>inAndroidManifest.xml
  3. Nella tua NavigationDrawerFragmentclasse, modifica le tue ActionBaristanze in

    ActionBar mActionBar=((AppCompatActivity)getActivity()).getSupportActionBar();

MODIFICARE

Dovrebbe essere una coerenza tra l' attività e il layout . Se il layout ha uno dei temi di AppCompat come Theme.AppCompat.Light, la tua attività dovrebbeextends AppCompatActivity .

Volevo avere l' icona di hamburger e un cassetto di navigazione che assomiglia all'app Android Gmail , ma ho finito con un brutto cassetto di navigazione . Tutto questo perché tutte le mie classi extends Activityinvece di AppCompatActivity.

Ho ripensato l'intero progetto per estenderlo AppCompatActivity, quindi fai clic con il Layout Folderpulsante destro del mouse su , ho scelto new-> Activityquindi Navigation Drawer Activitye Boom, tutto è fatto per me!


1
android.view.InflateException: Binary XML file line #16: Error inflating class com.google.android.material.bottomappbar.BottomAppBar

La vista può essere qualsiasi cosa che non si gonfia, questo tipo di errore si presenta quando si verifica uno scontro nella risoluzione dei nomi di classe o dell'attributo name di una vista a cui si fa riferimento nel file XML.

Quando ricevo lo stesso errore, ho appena ottenuto tutto pulito e sicuro nel file UI-XML, la vista che stavo usando,

   <com.google.android.material.bottomappbar.BottomAppBar
    android:id="@+id/bottomAppBar"
    style="@style/Widget.MaterialComponents.BottomAppBar.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:hideOnScroll="true"
    app:menu="@menu/bottom_app_bar"
    app:navigationIcon="@drawable/ic__menu_24"/>

Stavo usando un attributo di stile che si riferiva alla proprietà Componenti del materiale. Ma il mio styles.xml aveva ...

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
....
</style>

Dove la risoluzione della classe stava affrontando il conflitto. I miei attributi di visualizzazione fanno riferimento a una proprietà che non è stata definita nel tema della mia app. Il tema genitore giusto da componenti materiali mi ha aiutato. Quindi ho cambiato l'attributo parent in ...

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
...
</style>

Che ha risolto il problema.


0

Penso che il problema di base sia con "android: targetSdkVersion" che è definito in AndroidManifest.xml. Nel mio caso, il valore iniziale che ho definito come:

android:targetSdkVersion=16

L'ho cambiato in:

android:targetSdkVersion=22

che ha risolto il mio errore. Pertanto, impostare correttamente "targetSdkVersion" è importante anche prima di creare un'app Android.


0

Nel caso in cui venga qualcun altro e le risposte non aiutano a risolvere il problema, un'altra cosa da provare.

Come altri hanno già detto, questo di solito è causato da un problema nidificato nell'XML stesso rispetto a qualcosa che hai fatto di sbagliato in Java. Nel mio caso, è stato un errore super facile (e stupido) da correggere.

Ho avuto un codice come questo:

<view
    android:layout_width="fill_parent"
    android:layout_height="1dip"
    android:id="@+id/view44"
    android:background="@color/gray"
    />

Quando tutto quello che dovevo fare era capitalizzare la v in 'Visualizza' in modo che il sistema la riconoscesse. Verifica che le tue visualizzazioni personalizzate (o frammenti, recyclervview, ecc.) Presentino tutte la dichiarazione in maiuscolo corretta in modo che il completamento automatico XML corrisponda alla vista appropriata.


0

Ho avuto anche questo errore, e dopo molto tempo il debug del problema sembra che la mia MainClass abbia esteso l'attività invece di FrameActivity, nel mio caso, l'xml non era un problema. Spero di aiutarti.


0

Nel mio caso .

Il layout che stavo cercando di gonfiare aveva

<include 
 layout  = "...."
/>

tag, rimuovendolo risolto.

Stavo cercando di gonfiare un layout precedente progettato per un Actvity nell'adattatore view-pager.


0

Il mio errore è stato causato da un altro problema.

Stavo passando un fascio da un'attività al suo frammento. Quando ho commentato il codice che riceveva il pacchetto nel frammento, l'errore era sparito. A quanto pare, il mio errore era dovuto al seguente "getArguments ();" parte che stava restituendo null.

Bundle args = getArguments();

Dopo aver verificato il codice di invio Attività, mi sono reso conto di avere un errore sciocco nel seguito;

Bundle bundle =new Bundle();
 bundle.putInt("recipeID", recipe_position);
 Fragment mainFragment = new MainActivityFragment();
 mainFragment.setArguments(bundle);
 FragmentManager fragmentManager = getSupportFragmentManager();
 --> fragmentManager.beginTransaction()
                        .replace(R.id.container, new  MainActivityFragment(),
                                DetailRecipeActivityFragment.TAG)
                        .commit();

Stavo creando un NUOVO frammento in linea con la freccia. Mentre avrei dovuto usare il frammento pre-istanziato che aveva già il mio pacchetto. Quindi avrebbe dovuto essere:

Bundle bundle =new Bundle();
 bundle.putInt("recipeID", recipe_position);
 Fragment mainFragment = new MainActivityFragment();
 mainFragment.setArguments(bundle);
 Fragment mainFragment = new MainActivityFragment();
 FragmentManager fragmentManager = getSupportFragmentManager();
 -->fragmentManager.beginTransaction()
                        .replace(R.id.container, mainFragment,
                                DetailRecipeActivityFragment.TAG)
                        .commit();

Non so perché esattamente genera questo errore anziché un NPE, ma questo ha risolto il mio errore nel caso in cui qualcuno abbia lo stesso scenario


0

Stavo avendo lo stesso problema, nel mio caso il nome del pacchetto era sbagliato, risolvendolo ho risolto il problema.



0

Ho avuto questo errore quando avevo il mio RecyclerView alla radice del mio fragment.xml,

ma quando l'ho avvolto con un ViewGroup, l'app ha funzionato bene.


0

Aggiungi questo campo nome nella navigazione

android: name = "androidx.navigation.fragment.NavHostFragment"

   <fragment
             android:id="@+id/container"
             android:layout_width="match_parent"
             android:layout_height="0dp"
             android:name="androidx.navigation.fragment.NavHostFragment"
             app:navGraph="@navigation/navigation"
             app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
             app:layout_constraintTop_toTopOf="parent">
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.