Frammento Android nessuna vista trovata per ID?


287

Ho un frammento che sto cercando di aggiungere in una vista.

FragmentManager fragMgr=getSupportFragmentManager();
feed_parser_activity content = (feed_parser_activity)fragMgr
                                    .findFragmentById(R.id.feedContentContainer);
FragmentTransaction xaction=fragMgr.beginTransaction();

if (content == null || content.isRemoving()) {
    content=new feed_parser_activity(item.getLink().toString());
    xaction
        .add(R.id.feedContentContainer, content)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .addToBackStack(null)
        .commit();
    Log.e("Abstract", "DONE");
}

Quando viene eseguito questo codice, viene visualizzato il seguente errore nel debug.

java.lang.IllegalArgumentException: No view found for id 0x7f080011 
   for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}

feed_parser_activityè un frammento impostato sul layout del frammento in xml.
Sto usando un FragmentActivity per ospitare il Fragment Layout che tiene il file feed_parser_layout.
Lo sto codificando correttamente sopra?


3
Puoi includere l'XML?
fabbro

1
Si può ottenere lo stesso errore quando si effettua una transazione di frammenti prima di chiamare setContentView in Activity
Pavel

Risposte:


374

Ho avuto anche questo problema, fino a quando mi sono reso conto che avevo specificato il layout sbagliato setContentView()del onCreate()metodo della FragmentActivity.

L'ID passato FragmentTransaction.add(), nel tuo caso R.id.feedContentContainer, deve essere figlio del layout specificato in setContentView().

Non ci hai mostrato il tuo onCreate()metodo, quindi forse questo è lo stesso problema.


5
Cosa intendi per figlio del layout specificato in setContentView? Come renderlo bambino?
NinjaCoder

11
Una vista è figlia di un'altra vista se è dichiarata all'interno della vista padre nell'XML. vale a dire. un TextViewinterno di a RelativeLayoutè un figlio di RelativeLayout.
howettl,

@howettl: so che è un po 'vecchio post. Ma non sono in grado di risolvere questo problema con la tua risposta. Ecco la domanda SO: stackoverflow.com/questions/25844394/… - Puoi aiutarmi con questo, per favore? Grazie!
TheDevMan

@howettl, puoi aiutarmi per favore con un problema simile. stackoverflow.com/questions/26966623/...
Vamsi Challa

3
È successo a me. Il rovescio della medaglia di CTRL + C CTRL + V.
0nyx,

297

Questo errore si verifica anche quando si hanno frammenti nidificati e li si aggiunge con getSupportFragmentManager () invece di getChildFragmentManager ().


10
Il mio era il contrario. Stavo cercando di aggiungere al contenitore dei frammenti principale chiamando getChildFragmentManager (). Sottolineando questo risolto per me. Grazie +1
speedynomads

@Malachiasz: potresti dare un'occhiata a questa domanda su ViewPager? Grazie stackoverflow.com/questions/27937250/…
Hoa Vu

Questo era esattamente il mio problema, grazie. Strano però, ciò si è verificato solo con l'orientamento orizzontale quando si chiama .show (). Usarlo per sostituire il frammento principale ha funzionato bene.
Cohenadair,

1
Quello era esattamente il mio problema, grazie mille! Stava succedendo solo su alcuni dispositivi lenti, quindi era difficile capire cosa stesse succedendo esattamente.
YawaraNes,

1
Dopo essere arrivato a questa domanda più volte mi sono sentito come se nessun altro avesse il mio problema, ho dovuto scorrere un po 'verso il basso. Sarebbe bello se potessero ottenere il codice di errore per essere più specifici per dire che questo potrebbe essere il caso.
KodyVanRy,

67

La soluzione era usare getChildFragmentManager()

invece di getFragmentManager()

quando si chiama da un frammento. Se si chiama il metodo da un'attività, utilizzare getFragmentManager().

Questo risolverà il problema.


4
@ surfer190 usa getSupportFragmentManager()invece.
Amir Hossein Ghasemi,

Modificato per ottenereChildFragmentManager () e questo funziona !!
Shyam,

Nel mio caso stavo usando la navigazione dei frammenti usando viewpager nel frammento del foglio inferiore. La tua soluzione ha funzionato alla grande !! Tonnellate di Thanx fr.
Debasish Ghosh,

1
ha avuto lo stesso problema e questo mi ha risolto! getChildFragmentManager () invece di getActivity (). getFragmentManager () che ha senso una volta che ci ho pensato :) TY!
Simon,

Sto chiamando il metodo da un'attività ma getFragmentManager()è obsoleto, ora!
Alireza Noorali

29

Ho avuto questo problema (durante la creazione della mia UI nel codice) ed è stato causato dal fatto che il mio ViewPager(che mostrava Fragment) non aveva un ID impostato, quindi ho semplicemente usato pager.setID(id)e poi ha funzionato.

Questa pagina mi ha aiutato a capirlo.


1
Ho avuto lo stesso problema quando usato viewPager. Lo stesso errore è stato corretto utilizzando viewPager.setCurrentItem (n) prima di eseguire la transazione. Forse sarà utile per qualcuno.
Kirk Hammett,

Nel mio caso era in una direzione simile, ma il problema era che ho usato un valore negativo in .setID. L'uso di un numero intero positivo ha risolto il problema.
Ignacio Hagopian,

29

Un altro scenario che ho incontrato. Se usi frammenti nidificati, dì un ViewPager in un frammento con le sue pagine anche frammenti.

Quando esegui la transazione Frammento nel frammento interno (pagina di ViewPager), avrai bisogno

FragmentManager fragmentManager = getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

getActivity () è la chiave qui. ...


sì ... per me tutte le altre implementazioni andavano bene a parte questo. Ho provato direttamente ad accedere al codice in questo modo: FragmentTransactionaction = getSupportFragmentManager (). BeginTransaction (); Quindi ho ottenuto il frammentmanager usando getActivity () separatamente come hai menzionato. Funziona abbastanza
anand krish

18

Nel mio caso stavo cercando di mostrare un DialogFragment contenente un cercapersone e questa eccezione è stata lanciata quando FragmentPagerAdapter ha tentato di aggiungere i frammenti al cercapersone. Sulla base della risposta howettl, suppongo che fosse dovuto al genitore Pager non era la vista impostata in setContentView () nel mio FragmentActivity.

L'unica modifica che ho fatto per risolvere il problema è stata la creazione di FragmentPagerAdapter passando in un FragmentMager ottenuto chiamando getChildFragmentManager (), non quello ottenuto chiamando getFragmentManager () come faccio normalmente.

    public class PagerDialog extends DialogFragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.pager_dialog, container, false);

        MyPagerAdapter pagerAdapter = new MyPagerAdapter(getChildFragmentManager());
        ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
        pager.setAdapter(pagerAdapter);

        return rootView;
    }
}

getChildFragmentManager () non è accessibile da DialogFragment
Abdalrahman Shatou,

14

Questa eccezione può verificarsi anche se l'ID layout a cui si sta passando FragmentTransaction.replace(int ID, fragment)esiste in altri layout che vengono gonfiati. Assicurarsi che l'ID layout sia univoco e dovrebbe funzionare.


Il compilatore non segnala se l'id non è presente nel layout corrente se non è univoco, quindi il vero problema non è l'unicità dell'id ma l'omissione dell'id nel layout corrente.
Samuel,

13

Una risposta che ho letto su un altro thread simile a questo che ha funzionato per me quando ho avuto questo problema ha coinvolto il layout xml.

Il tuo logcat dice "Nessuna vista trovata per id 0x7f080011".

Aprire gen->package->R.java->ide quindi cercare id 0x7f080011.

Quando ho avuto questo problema, questo ID apparteneva a un FrameLayoutnel mio activity_main.xmlfile.

FrameLayout non aveva un ID (non era presente alcuna istruzione android:id = "blablabla").

Assicurarsi che tutti i componenti in tutti i layout abbiano ID, in particolare il componente citato nel logcat.


1
Bello. In Android Studio con LinuxOS è qui: / home / bob / AndroidStudioWorkspace / HelloWorld / app / build / generate / source / r / release / android / support / v7 / appcompat.
Porti il

11

Ho ricevuto questo errore quando ho eseguito l'aggiornamento da com.android.support:support-v4:21.0.0a com.android.support:support-v4:22.1.1.

Ho dovuto cambiare il mio layout da questo:

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

A questa:

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

    <FrameLayout
        android:id="@+id/container_frame_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

</FrameLayout> 

Quindi il layout DEVE avere una vista figlio. Suppongo che lo abbiano applicato nella nuova biblioteca.


9

Con frammenti nidificati

Per me usando getChildFragmentManager()invece di getActivity().getSupportFragmentManager()crash risolto

java.lang.IllegalArgumentException: nessuna vista trovata per id


ma all'interno dell'adattatore non posso ottenere getchildFragmentManger perché
Sunil Chaudhary

8

So che è già stata data una risposta per uno scenario, ma il mio problema era leggermente diverso e ho pensato di condividere nel caso in cui qualcuno fosse nei miei panni.

Stavo effettuando una transazione all'interno onCreate(), ma a questo punto l'albero della vista non è stato gonfiato, quindi ottieni lo stesso errore. Inserendo il codice di transazione, onResume()tutto è andato bene.

Quindi assicurati che il tuo codice di transazione venga eseguito dopo che l'albero di visualizzazione è stato gonfiato!


3
Hmm ... nel mio caso non ha fatto alcuna differenza se tale codice fosse in onCreate o onResume
IgorGanapolsky

@IgorGanapolsky anche nel mio caso, risolto con il callback da frammento onAttach. Vedi la mia risposta
Alexander Malakhov il

Questo era esattamente il mio problema. Una chiamata a un'altra classe per aggiornare uno stato di visualizzazione stava eseguendo una transazione di frammenti su un layout che non era stato ancora gonfiato. Chiamandolo in onResume () risolto il problema.
AWT,

8

Stavo affrontando un brutto errore durante l'utilizzo di Viewpager in Recycler View. Sotto l'errore ho affrontato una situazione speciale. Ho iniziato un frammento che aveva un RecyclerView con Viewpager (usando FragmentStatePagerAdapter). Ha funzionato bene fino a quando non sono passato a un frammento diverso facendo clic su una cella in RecyclerView, quindi sono tornato indietro utilizzando il pulsante Indietro dell'hardware del telefono e l'app si è bloccata.

E la cosa divertente di questo era che avevo due Viewpager nello stesso RecyclerView ed entrambi erano a circa 5 celle di distanza (altre non erano visibili sullo schermo, era inattivo). Quindi inizialmente ho appena applicato la soluzione al primo Viewpager e ne ho lasciato l'altro com'è (Viewpager usando i frammenti).

Navigare indietro funzionava bene, quando il pager della prima vista era visualizzabile. Ora, quando sono passato al secondo, poi ho cambiato frammento e sono tornato, si è schiantato (la stessa cosa è successa con il primo). Quindi ho dovuto cambiare entrambi i Viewpager.

Comunque, leggi sotto per trovare una soluzione funzionante. Errore di arresto di seguito:

java.lang.IllegalArgumentException: No view found for id 0x7f0c0098 (com.kk:id/pagerDetailAndTips) for fragment ProductDetailsAndTipsFragment{189bcbce #0 id=0x7f0c0098}

Ho passato ore a debug. Leggi questo post completo della discussione fino in fondo applicando tutte le soluzioni, incluso assicurandoti di passare childFragmentManager.

Niente ha funzionato.

Infine, invece di utilizzare FragmentStatePagerAdapter, ho esteso PagerAdapter e l'ho usato in Viewpager senza usare i frammenti. Credo che ci sia un BUG con frammenti nidificati. Comunque, abbiamo opzioni. Leggere ...

Il link seguente è stato molto utile:

Viewpager senza frammenti

Il collegamento potrebbe interrompersi, quindi sto pubblicando la soluzione implementata qui sotto:

public class ScreenSlidePagerAdapter extends PagerAdapter {
private static final String TAG = "ScreenSlidePager";
ProductDetails productDetails;
ImageView imgProductImage;
ArrayList<Imagelist> imagelists;
Context mContext;

// Constructor
public ScreenSlidePagerAdapter(Context mContext,ProductDetails productDetails) {
    //super(fm);
    this.mContext = mContext;
    this.productDetails = productDetails;
}

// Here is where you inflate your View and instantiate each View and set their values
@Override
public Object instantiateItem(ViewGroup container, int position) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.product_image_slide_cell,container,false);

    imgProductImage = (ImageView) layout.findViewById(R.id.imgSlidingProductImage);
    String url = null;
    if (imagelists != null) {
        url = imagelists.get(position).getImage();
    }

    // This is UniversalImageLoader Image downloader method to download and set Image onto Imageview
    ImageLoader.getInstance().displayImage(url, imgProductImage, Kk.options);

    // Finally add view to Viewgroup. Same as where we return our fragment in FragmentStatePagerAdapter
    container.addView(layout);
    return layout;
}

// Write as it is. I don't know much about it
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((View) object);
    /*super.destroyItem(container, position, object);*/
}

// Get the count
@Override
public int getCount() {
    int size = 0;

    if (productDetails != null) {
        imagelists =  productDetails.getImagelist();
        if (imagelists != null) {
            size = imagelists.size();
        }
    }
    Log.d(TAG,"Adapter Size = "+size);
    return size;
}

// Write as it is. I don't know much about it
@Override
public boolean isViewFromObject(View view, Object object) {

    return view == object;
}

}

Spero che questo sia stato utile !!


Sì, questa soluzione ha funzionato, ma se avessi bisogno di una costruzione difficile con il mio ciclo di vita e le variabili, ma non solo le viste? Verrà utilizzato con visualizzazioni video e visualizzazioni immagini con pulsanti di riproduzione e disattivazione dell'audio. Niente di utile per il mio caso?
Nikita Axyonov,

Credo che questo sia il motivo: stackoverflow.com/a/27966053/1377819
Hoang Nguyen Huu,

7

Ho avuto lo stesso problema ma il mio problema si stava verificando sul cambio di orientamento. Nessuna delle altre soluzioni ha funzionato. Quindi risulta che ho dimenticato di rimuovere setRetainInstance(true);dai miei frammenti, quando facevo un layout a due o uno riquadro in base alle dimensioni dello schermo.


trasforma false in setRetainInstance (true) se ti trovi in ​​frammenti nidificati, questo risolverà l'errore.
ralphgabb,

5

Il mio errore era sul FragamentTransaction .

Lo stavo facendo t.replace(R.layout.mylayout); invece dit.replace(R.id.mylayout);

La differenza è che uno è il layout e l'altro è un riferimento al layout(id)


4

Nel caso in cui qualcuno abbia commesso lo stesso stupido errore che ho fatto io; verifica che non stai sovrascrivendo il contenuto dell'attività da qualche parte (ad esempio, cerca ulteriori chiamate a setContentView)

Nel mio caso, a causa di copia e incolla trascurate, ho usato DataBindingUtil.setContentView nel mio frammento, invece di DataBindingUtil.inflate, che ha incasinato lo stato dell'attività.


3

Ho avuto lo stesso problema, fammi pubblicare il mio codice in modo che tutti possano vederlo e non fare la stessa cosa che ho fatto.

@Override
protected void onResume()
{
    super.onResume();

    fragManager = getSupportFragmentManager();

    Fragment answerPad=getDefaultAnswerPad();
    setAnswerPad(answerPad);
    setContentView(R.layout.abstract_test_view);
}
protected void setAnswerPad(AbstractAnswerFragment pad)
{
    fragManager.beginTransaction()
        .add(R.id.AnswerArea, pad, "AnswerArea")
        .commit();
    fragManager.executePendingTransactions();
}

Nota che stavo installando frammenti prima di me setContentView. Ooops.


1
Grazie! Stavo facendo la stessa cosa, quindi ho inserito il setContentViewmioonBuildHeaders
Randy il

3

Questa pagina sembra essere una buona posizione centrale per pubblicare suggerimenti sul Fragment IllegalArgumentException. Ecco un'altra cosa che puoi provare. Questo è ciò che finalmente ha funzionato per me:

Avevo dimenticato di avere un file di layout separato per l'orientamento orizzontale. Dopo aver aggiunto anche qui il mio contenitore FrameLayout, il frammento ha funzionato.


In una nota a parte, se hai già provato tutto il resto suggerito in questa pagina (e anche l'intera Internet) e hai tolto i capelli per ore, considera di scaricare questi fastidiosi frammenti e tornare a un buon vecchio layout standard. (In realtà è quello che stavo facendo quando ho finalmente scoperto il mio problema.) Puoi ancora usare il concetto di contenitore. Tuttavia, invece di riempirlo con un frammento, puoi usare il includetag xml per riempirlo con lo stesso layout che avresti usato nel tuo frammento. Potresti fare qualcosa del genere nel tuo layout principale:

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <include layout="@layout/former_fragment_layout" />

</FrameLayout>

dove si former_fragment_layouttrova il nome del file di layout XML che stavi cercando di usare nel tuo frammento. Vedere Riutilizzo dei layout con include per ulteriori informazioni.


questo è un buon suggerimento, ma non funziona se è necessario cambiare i frammenti in modo dinamico. Inoltre riduce la riutilizzabilità, poiché è possibile incapsulare il comportamento (codice) nel frammento.
Alexander Malakhov,

Sono assolutamente d'accordo. I frammenti sono di gran lunga migliori.
Suragch,

2

Nel mio caso avevo un SupportMapFragment in un elemento di visualizzazione riciclatore (stavo usando il "liteMode" in alto che fa apparire la mappa come non interattiva, quasi come un'immagine statica). Stavo usando il corretto FragmentManager e tutto sembrava funzionare bene ... con un piccolo elenco. Una volta che l'elenco degli elementi ha superato di un po 'l'altezza dello schermo, ho iniziato a riscontrare questo problema durante lo scorrimento.

Alla fine, fu perché stavo iniettando un SupportMapFragment dinamico all'interno di una vista, che si trovava all'interno di un altro frammento, per aggirare alcuni problemi che stavo riscontrando quando provavo a dichiararlo staticamente nel mio XML. Per questo motivo, il layout del segnaposto del frammento può essere sostituito con il frammento effettivo solo una volta che la vista è stata allegata alla finestra, cioè visibile sullo schermo. Quindi avevo inserito il mio codice per inizializzare SupportMapFragment, sostituire il frammento e chiamare getMapAsync () nell'evento onAttachedToWindow.

Quello che ho dimenticato di fare è stato assicurarmi che il mio codice non venisse eseguito due volte. Vale a dire nell'evento onAttachedToWindow, controlla se il mio SupportMapFragment dinamico era ancora nullo prima di provare a crearne una nuova istanza e sostituire un frammento. Quando l'elemento esce dalla parte superiore di RecyclerView, viene staccato dalla finestra, quindi ricollegato quando si scorre di nuovo su di esso, quindi questo evento viene generato più volte.

Una volta aggiunto il controllo null, è accaduto solo una volta per oggetto RecyclerView e il problema è andato via! TL; DR!


2

Questo succede quando chiami da un frammento all'interno di un altro.

uso :

getActivity().getSupportFragmentManager().beginTransaction();

1

Ho riscontrato questo problema quando ho provato a sostituire la vista con il mio frammento in onCreateView(). Come questo:

public class MyProjectListFrag extends Fragment {


    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();
    }

Mi ha detto

11-25 14:06:04.848: E/AndroidRuntime(26040): java.lang.IllegalArgumentException: No view found for id 0x7f05003f (com.example.myays:id/container_for_my_pro_list) for fragment MyProjectListFragment{41692f40 #2 id=0x7f05003f myProjectListFragment}

Quindi ho risolto questo problema inserendo il testo sostitutivo onActivityCreated(). Come questo:

public class MyProjectListFrag extends Fragment {

    private final static String TAG = "lch";

    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        return inflater
                .inflate(R.layout.frag_my_project_list, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();

    }
  1. Devi restituire una vista in onCreateView()modo da poterla sostituire in seguito
  2. È possibile inserire qualsiasi operazione verso questa vista nella seguente funzione nel ciclo di sollevamento dei frammenti, ad esempio onActivityCreated()

Spero che questo ti aiuti!


1

Ho corretto questo errore, utilizzo il commitNow()rimpiazzo commit().

mFragment.getChildFragmentManager()
  .beginTransaction()
  .replace(R.id.main_fragment_container,fragment)
  .commitNowAllowingStateLoss();

Il commitNowè un metodo di sincronizzazione, il commit()metodo è un metodo asincrono.


1

Nel mio caso questa eccezione è stata generata quando ho usato ID diversi per lo stesso elemento di layout (segnaposto del frammento) mentre ne avevo diversi per varianti di build diverse. Per qualche motivo funziona perfettamente quando si sostituisce il frammento per la prima volta, ma se si tenta di farlo di nuovo si ottiene questa eccezione. Quindi assicurati di utilizzare lo stesso ID se disponi di più layout per diverse varianti di build.


0

Se si sta tentando di sostituire un frammento all'interno di un frammento con fragmentManagerma non si sta gonfiando il frammento padre che può causare un problema.

In BaseFragment.java OnCreateView :

if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .replace(R.id.container, new DifferentFragment())
                    .commit();
        }

return super.onCreateView(inflater, container, savedInstanceState);

Sostituisci super.onCreateView(inflater, container, savedInstanceState); con gonfiando il layout corretto per il frammento:

        return inflater.inflate(R.layout.base_fragment, container, false);

0

Ho avuto lo stesso problema quando stavo facendo una transazione di frammento durante la creazione di attività.

Il problema principale è quello che Nick ha già sottolineato : l'albero della vista non è stato ancora gonfiato. Ma la sua soluzione non ha funzionato: la stessa eccezione in onResume, onPostCreate ecc.

La soluzione è aggiungere il callback al frammento del contenitore per segnalare quando è pronto:

public class MyContainerFragment extends Fragment {
    public static interface Callbacks {
        void onMyContainerAttached();
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d(TAG, "--- onAttach");
        ((Callbacks) activity).onMyContainerAttached();
    }

    //... rest of code
}

E poi in attività:

public class MainActivity extends Activity
        implements MyContainerFragment.Callbacks
{
    @Override
    public void onMyContainerAttached() {
        getFragmentManager()
                .beginTransaction()
                .replace(R.id.containerFrame, new MyFragment())
                .commit();
    }

    //...
}

0

Nel mio caso, stavo usando un file di classe di frammenti per dichiarare una classe dell'adattatore listview. Ho appena usato un file diverso per la classe dell'adattatore pubblico e l'errore era sparito.


0

Questo problema si verifica anche quando non mettete <include layout="@layout/your_fragment_layout"/>nel vostroapp_bar_main.xml


0

Succede anche quando hai due viste in due frammenti con gli stessi ID


Questo non è corretto In questo caso, il codice non verrebbe nemmeno compilato.
Taslim Oseni,

0

Ho avuto lo stesso problema che è stato causato perché ho cercato di aggiungere frammenti prima di aggiungere il layout del contenitore all'attività.


0

A volte è perché stai usando BottomNavigationView. Se apri un Intento dalla navigazione e in quell'attività apri un frammento, diciamo

transaction.replace(R.id.container,new YourFragment());

quindi l'attività non sarà in grado di trovare il metodo di navigazione che stai utilizzando.

SOLUZIONE: modifica l'attività in frammentazione e gestisci la navigazione con addOnBackStack nella tua app. Se hai implementato la navigazione Jetpack, utilizza solo i frammenti nel tuo progetto.


0

Nel mio caso. Ho un tempo Activitycon serveral Fragmentche devo ricreare Fragmentquando

  • la lingua è il cambiamento
  • layout dei frammenti alcuni non necessitano di alcuni o è necessario ricreare la modifica del contenuto
  • altre modifiche
  • Cancella tutto Fragmente imposta tutto sunull in attività, ma Frammento già crearsi, mentre activty host è impostato fagiolo nullo, quindi prima chiamata vista Frammento controllare nullo

    per esempio

    Activity{
        fragment
        recreate{
           fragment = null then new instance
        }
    
    }
    
    Fragment{
        if((activity).fragment != null) {
           findViewById()
        }
    
    }
    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.