Fragmento de Android ¿no se ha encontrado ninguna vista para ID?

287

Tengo un fragmento que intento agregar a 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");
}

Cuando se ejecuta este código, aparece el siguiente error en la depuración.

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

feed_parser_activityes un Fragment que está configurado en Fragment layout en xml.
Estoy usando una FragmentActivity para alojar el Fragment Layout que contiene el feed_parser_layout.
¿Estoy codificando esto correctamente arriba?

coder_For_Life22
fuente
3
¿Puedes incluir el XML?
jsmith
1
Se puede obtener el mismo error al realizar una transacción fragmentada antes de llamar a setContentView en Activity
Pavel el

Respuestas:

374

También estaba teniendo este problema, hasta que me di cuenta de que había especificado el diseño incorrecto setContentView()del onCreate()método de FragmentActivity.

La identificación pasada FragmentTransaction.add(), en su caso R.id.feedContentContainer, debe ser hija del diseño especificado en setContentView().

No nos mostró su onCreate()método, por lo que quizás este sea el mismo problema.

howettl
fuente
55
¿Qué quiere decir por hijo del diseño especificado en setContentView? ¿Cómo hacerlo niño?
NinjaCoder
11
Una vista es hija de otra vista si se declara dentro de la vista primaria en el XML. es decir. un TextViewinterior de a RelativeLayoutes hijo de RelativeLayout.
howettl
@howettl: Sé que es una publicación un poco vieja. Pero no puedo solucionar este problema con su respuesta. Aquí está la pregunta SO: stackoverflow.com/questions/25844394/… - ¿Me pueden ayudar con esto por favor? ¡Gracias!
TheDevMan
@ howettl, ¿puedes ayudarme con un problema similar? stackoverflow.com/questions/26966623/…
Vamsi Challa
3
Me sucedió. La desventaja de CTRL + C CTRL + V.
0nyx
295

Este error también se produce al haber anidado Fragmentos y agregarlos con getSupportFragmentManager () en lugar de getChildFragmentManager ().

Malaquiasz
fuente
10
La mía fue al revés. Intentaba agregar al contenedor de fragmentos principal llamando a getChildFragmentManager (). Señalar esto me lo resolvió. Gracias +1
speedynomads
@Malachiasz: ¿Podría echar un vistazo a esta pregunta sobre ViewPager? Gracias stackoverflow.com/questions/27937250/…
Hoa Vu
Este fue exactamente mi problema, gracias. Aunque extraño, esto solo ocurrió en orientación horizontal cuando se llamaba .show (). Usarlo para reemplazar el fragmento principal funcionó bien.
cohenadair
1
Ese fue exactamente mi problema, muchas gracias! Estaba sucediendo solo en algunos dispositivos lentos, por lo que era difícil entender qué estaba sucediendo exactamente.
YawaraNes
1
Después de responder a esta pregunta varias veces, sentí que nadie más tenía mi problema, solo tenía que desplazarme un poco hacia abajo. Sería bueno si pudieran obtener el código de error más específico para decir que este podría ser el caso.
KodyVanRy
67

La solución fue usar getChildFragmentManager()

en vez de getFragmentManager()

cuando se llama desde un fragmento. Si está llamando al método desde una actividad, úselo getFragmentManager().

Eso resolverá el problema.

Sterling Diaz
fuente
44
@ surfer190 uso getSupportFragmentManager()en su lugar.
Amir Hossein Ghasemi
¡Cambiado a getChildFragmentManager () y esto funciona!
Shyam
En mi caso, estaba usando la navegación de fragmentos usando el visor en el fragmento de la hoja inferior. ¡Su solución funcionó de manera brillante! Toneladas de hermano Thanx.
Debasish Ghosh
1
Tuve el mismo problema y esto lo resolvió para mí. getChildFragmentManager () en lugar de getActivity (). getFragmentManager () que tiene sentido una vez que lo pensé :) TY!
Simon
Estoy llamando al método desde una actividad, pero getFragmentManager()ahora está en desuso.
Alireza Noorali
29

Tuve este problema (cuando construí mi IU en el código) y fue causado por mi ViewPager(que mostró Fragments) que no tenía un conjunto de ID, así que simplemente lo usé pager.setID(id)y luego funcionó.

Esta página me ayudó a resolver eso.

kaka
fuente
1
Tuve el mismo problema cuando utilicé viewPager. El mismo error se solucionó utilizando viewPager.setCurrentItem (n) antes de realizar la transacción. Tal vez sea útil para alguien.
Kirk Hammett
En mi caso fue en una dirección similar, pero el problema fue que usé un valor negativo en .setID. El uso de un número entero positivo resolvió el problema.
Ignacio Hagopian
29

Otro escenario que he conocido. Si usa fragmentos anidados, digamos un ViewPager en un Fragmento con sus páginas también Fragmentos.

Cuando realice una transacción Fragment en el fragmento interno (página de ViewPager), necesitará

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

getActivity () es la clave aquí. ...

zdd
fuente
sí ... para mí, todas las demás implementaciones estaban bien, aparte de esto. He intentado acceder directamente al código de esta manera: FragmentTransaction transacción = getSupportFragmentManager (). BeginTransaction (); Luego obtuve el fragmentmanager usando getActivity () por separado como mencionaste. Funciona bastante
anand krish
18

En mi caso, estaba tratando de mostrar un DialogFragment que contiene un localizador y esta excepción se produjo cuando el FragmentPagerAdapter intentó agregar los Fragmentos al localizador. Según la respuesta de howettl, supongo que se debió a que el padre Pager no era la vista establecida en setContentView () en mi FragmentActivity.

El único cambio que hice para resolver el problema fue crear el FragmentPagerAdapter pasando un FragmentMager obtenido llamando a getChildFragmentManager (), no el que obtuve llamando a getFragmentManager () como lo hago 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;
    }
}
Garibay
fuente
getChildFragmentManager () no es accesible desde DialogFragment
Abdalrahman Shatou
14

Esta excepción también puede ocurrir si el ID de diseño al que está pasando FragmentTransaction.replace(int ID, fragment)existe en otros diseños que se están inflando. Asegúrese de que la ID de diseño sea única y que funcione.

ealihodzic
fuente
El compilador no informa si falta la identificación en el diseño actual si no es única, por lo tanto, el verdadero problema no es la unicidad de la identificación sino la omisión de la identificación en el diseño actual.
Samuel
13

Una respuesta que leí en otro hilo similar a este que funcionó para mí cuando tuve este problema involucró el diseño xml.

Su logcat dice "No se ha encontrado ninguna vista para el ID 0x7f080011".

Abre el gen->package->R.java->idy luego busca id 0x7f080011.

Cuando tuve este problema, esta identificación pertenecía a un FrameLayouten mi activity_main.xmlarchivo.

FrameLayout no tenía una identificación (no había ninguna declaración android:id = "blablabla").

Asegúrese de que todos sus componentes en todos sus diseños tengan ID, particularmente el componente citado en el logcat.

escocés
fuente
1
Agradable. En Android Studio con LinuxOS está aquí: / home / bob / AndroidStudioWorkspace / HelloWorld / app / build / generate / source / r / release / android / support / v7 / appcompat.
portsample
11

Recibí este error cuando actualicé de com.android.support:support-v4:21.0.0a com.android.support:support-v4:22.1.1.

Tuve que cambiar mi diseño de esto:

<?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 esto:

<?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> 

Por lo tanto, el diseño DEBE tener una vista secundaria. Supongo que hicieron cumplir esto en la nueva biblioteca.

ono
fuente
9

Con fragmentos anidados

Para mí usando en getChildFragmentManager()lugar de un getActivity().getSupportFragmentManager()bloqueo resuelto

java.lang.IllegalArgumentException: no se ha encontrado ninguna vista para el ID

UdayaLakmal
fuente
pero el adaptador interno no puede implicar getchildFragmentManger por qué
Sunil Chaudhary
8

Sé que esto ya ha sido respondido para un escenario, pero mi problema era ligeramente diferente y pensé en compartirlo en caso de que alguien más estuviera en mi lugar.

Estaba haciendo una transacción dentro onCreate(), pero en este punto el árbol de vistas no se ha inflado, por lo que obtiene este mismo error. Poner el código de transacción onResume()hizo que todo funcionara bien.

¡Tan solo asegúrese de que su código de transacción se ejecute después de que se haya inflado el árbol de vistas!

Mella
fuente
3
Hmm ... en mi caso no hizo ninguna diferencia si ese código estaba en onCreate o onResume
IgorGanapolsky
@IgorGanapolsky en mi caso también lo resolvió con la devolución de llamada de fragmentos onAttach. Ver mi respuesta
Alexander Malakhov
Este fue mi problema exactamente. Una llamada a otra clase para actualizar un estado de vista estaba realizando una transacción de fragmento en un diseño que aún no se había inflado. Llamarlo en onResume () solucionó el problema.
AWT
8

Estaba enfrentando un error desagradable al usar Viewpager en Recycler View. Debajo del error que enfrenté en una situación especial. Comencé un fragmento que tenía un RecyclerView con Viewpager (usando FragmentStatePagerAdapter). Funcionó bien hasta que cambié a un fragmento diferente al hacer clic en una Celda en RecyclerView, y luego volví a navegar usando el botón Atrás del hardware del teléfono y la aplicación se bloqueó.

Y lo divertido de esto es que tenía dos Viewpagers en el mismo RecyclerView y ambos estaban a unas 5 celdas de distancia (el otro no era visible en la pantalla, estaba inactivo). Así que inicialmente solo apliqué la Solución al primer Viewpager y dejé otra como está (Viewpager usando Fragmentos).

Navegar hacia atrás funcionó bien, cuando la primera vista del localizador era visible. Ahora, cuando me desplacé hacia el segundo y luego cambié el fragmento y regresé, se estrelló (lo mismo sucedió con el primero). Así que tuve que cambiar los dos Viewpagers.

De todos modos, lea a continuación para encontrar una solución de trabajo. Error de bloqueo a continuación:

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

Pasé horas depurándolo. Lea esta publicación completa de Thread hasta el final aplicando todas las soluciones, incluso asegurándose de que estoy pasando childFragmentManager.

Nada funcionó.

Finalmente, en lugar de usar FragmentStatePagerAdapter, extendí PagerAdapter y lo usé en Viewpager sin usar fragmentos. Creo que hay algunos donde hay un ERROR con fragmentos anidados. De todos modos, tenemos opciones. Leer ...

El siguiente enlace fue muy útil:

Visor sin fragmentos

El enlace puede morir, así que estoy publicando mi Solución implementada a continuación:

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;
}

}

Espero que esto haya sido útil.

Nilesh
fuente
Sí, esta solución funcionó, pero ¿qué pasa si necesito una construcción difícil con ciclo de vida y variables propias, pero no solo vistas? Se utilizará con videoViews e imageViews con botones de reproducción y silencio. ¿Nada útil para mi caso?
Nikita Axyonov
Creo que esta es la razón: stackoverflow.com/a/27966053/1377819
Hoang Nguyen Huu
7

Tuve el mismo problema, pero mi problema estaba sucediendo con el cambio de orientación. Ninguna de las otras soluciones funcionó. Resulta que olvidé eliminar setRetainInstance(true);de mis fragmentos, cuando hice un diseño de dos o un panel basado en el tamaño de la pantalla.

VM4
fuente
convierta en falso su setRetainInstance (true) si está en fragmentos anidados, esto solucionará el error.
ralphgabb
5

Mi error fue en el FragamentTransaction.

Estaba haciendo esto en t.replace(R.layout.mylayout);lugar det.replace(R.id.mylayout);

La diferencia es que uno es el diseño y el otro es una referencia al layout(id)

mut tony
fuente
4

Por si acaso alguien cometió el mismo estúpido error que yo cometí; compruebe que no está sobrescribiendo el contenido de la actividad en alguna parte (es decir, busque llamadas adicionales para configurar la vista de contenido)

En mi caso, debido a la copia y el pegado descuidados, utilicé DataBindingUtil.setContentView en mi fragmento, en lugar de DataBindingUtil.inflate, lo que estropeó el estado de la actividad.

Squimon
fuente
3

Tuve este mismo problema, permítanme publicar mi código para que todos puedan verlo, y no hacer lo mismo que yo.

@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();
}

Tenga en cuenta que estaba configurando fragmentos antes que yo setContentView. Ooops

PearsonArtPhoto
fuente
1
¡Gracias! Estaba haciendo lo mismo, así que puse mi setContentViewinterior en mionBuildHeaders
Randy
3

Esta página parece ser una buena ubicación central para publicar sugerencias sobre Fragment IllegalArgumentException. Aquí hay una cosa más que puedes probar. Esto es lo que finalmente funcionó para mí:

Había olvidado que tenía un archivo de diseño separado para la orientación horizontal. Después de agregar mi contenedor FrameLayout allí también, el fragmento funcionó.


En una nota aparte, si ya ha intentado todo lo demás sugerido en esta página (y todo el Internet también) y ha estado arrancándose el cabello durante horas, considere simplemente deshacerse de estos molestos fragmentos y volver a un buen diseño estándar anterior. (Eso es en realidad lo que estaba haciendo cuando finalmente descubrí mi problema). Todavía puede usar el concepto de contenedor. Sin embargo, en lugar de llenarlo con un fragmento, puede usar la includeetiqueta xml para llenarlo con el mismo diseño que habría usado en su fragmento. Podría hacer algo como esto en su diseño principal:

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

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

</FrameLayout>

donde former_fragment_layoutestá el nombre del archivo de diseño xml que estaba tratando de usar en su fragmento. Consulte Reutilización de diseños con include para obtener más información.

Suragch
fuente
Esta es una buena sugerencia, pero no funciona si uno necesita cambiar fragmentos dinámicamente. También reduce la reutilización, ya que puede encapsular el comportamiento (código) en el fragmento.
Alexander Malakhov
Definitivamente estoy de acuerdo. Los fragmentos son mucho mejores.
Suragch
2

En mi caso, tenía un SupportMapFragment en un elemento de vista de reciclador (estaba usando el "liteMode" más bajo que hace que el mapa aparezca como no interactivo, casi como una imagen estática). Estaba usando el FragmentManager correcto, y todo parecía funcionar bien ... con una pequeña lista. Una vez que la lista de elementos excedió un poco la altura de la pantalla, comencé a tener este problema al desplazarme.

Resultó que fue porque estaba inyectando un SupportMapFragment dinámico dentro de una vista, que estaba dentro de otro fragmento, para solucionar algunos problemas que tenía al intentar declararlo estáticamente en mi XML. Debido a esto, el diseño del marcador de posición del fragmento solo se puede reemplazar con el fragmento real una vez que la vista se adjuntó a la ventana, es decir, visible en la pantalla. Así que puse mi código para inicializar SupportMapFragment, hacer el reemplazo de Fragment y llamar a getMapAsync () en el evento onAttachedToWindow.

Lo que olvidé hacer fue asegurarme de que mi código no se ejecutara dos veces. Es decir, en el evento onAttachedToWindow, compruebe si mi SupportMapFragment dinámico seguía siendo nulo antes de intentar crear una nueva instancia y hacer un reemplazo de Fragment. Cuando el elemento sale de la parte superior de RecyclerView, se separa de la ventana y luego se vuelve a unir cuando se desplaza hacia él, por lo que este evento se dispara varias veces.

Una vez que agregué el cheque nulo, ¡sucedió solo una vez por elemento RecyclerView y el problema desapareció! TL; DR!

Breeno
fuente
2

Esto sucede cuando estás llamando desde un fragmento dentro de otro.

utilizar :

getActivity().getSupportFragmentManager().beginTransaction();
Arvin Sanaei
fuente
1

Encontré este problema cuando intenté reemplazar la vista con mi fragmento onCreateView(). Me gusta esto:

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();
    }

Me dijo

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}

Luego solucioné este problema al poner reemplazar en onActivityCreated(). Me gusta esto:

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. Debe devolver una vista onCreateView()para poder reemplazarla más tarde
  2. Puede poner cualquier operación hacia esta vista en la siguiente función en el ciclo de elevación de fragmentos, como onActivityCreated()

¡Espero que esto ayude!

Stephen Lin
fuente
1

Arreglé este error, uso el commitNow()reemplazo commit().

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

El commitNowes un método de sincronización, el commit()método es un método asíncrono.

user1232595
fuente
1

En mi caso, esta excepción se produjo cuando utilicé diferentes identificadores para el mismo elemento de diseño (marcador de posición de fragmento) mientras tenía varios de ellos para diferentes variantes de compilación. Por alguna razón, funciona perfectamente bien cuando reemplaza un fragmento por primera vez, pero si intenta hacerlo nuevamente, obtiene esta excepción. Por lo tanto, asegúrese de estar usando la misma identificación si tiene varios diseños para diferentes variantes de compilación.

TK
fuente
0

Si está intentando reemplazar un fragmento dentro de un fragmento con el fragmentManagerpero no está inflando el fragmento padre que puede causar un problema.

En BaseFragment.java OnCreateView :

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

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

Reemplace super.onCreateView(inflater, container, savedInstanceState); con inflar el diseño correcto para el fragmento:

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

Tuve el mismo problema cuando estaba haciendo una transacción fragmentada mientras creaba la actividad.

El problema central es lo que Nick ya ha señalado : el árbol de vista aún no se ha inflado. Pero su solución no funcionó: la misma excepción en onResume, onPostCreate, etc.

La solución es agregar una devolución de llamada al fragmento de contenedor para indicar cuándo está listo:

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
}

Y luego en actividad:

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

    //...
}
Alexander Malakhov
fuente
0

En mi caso, estaba usando un archivo de clase de fragmento para declarar una clase de adaptador de vista de lista. Acabo de usar un archivo diferente para la clase de adaptador público y el error desapareció.

Gauss
fuente
0

Este problema también ocurre cuando no coloca <include layout="@layout/your_fragment_layout"/>suapp_bar_main.xml

Bbake Waikhom
fuente
0

También sucede cuando tiene dos vistas en dos fragmentos con los mismos identificadores

Hossam Hassan
fuente
Esto es incorrecto. En este caso, el código ni siquiera se compilaría.
Taslim Oseni
0

Tuve el mismo problema que causó porque intenté agregar fragmentos antes de agregar el diseño del contenedor a la actividad.

Rohit
fuente
0

A veces es porque está utilizando un BottomNavigationView. Si abres una intención desde la navegación y en esa actividad abres un fragmento, digamos

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

entonces la Actividad no podrá encontrar el método de navegación que está utilizando.

SOLUCIÓN: Cambie la actividad para fragmentar y manejar la navegación con addOnBackStack en su aplicación. Si ha implementado la navegación Jetpack, simplemente use fragmentos en su proyecto.

Felipe Franco
fuente
0

En mi caso. Tengo un tiempo Activitycon varios Fragments necesito recrear Fragments cuando

  • el lenguaje es cambio
  • diseño de fragmentos algunos necesitan algunos no necesitan o el cambio de contenido necesita recrearse
  • otros cambios
  • Borro todo Fragmentsy configuro todo paranull en actividad, pero Fragment ya se creó a sí mismo, mientras que la actividad del host es nula, así que antes de llamar a la vista Fragment, verifíquelo como nulo

    por ejemplo

    Activity{
        fragment
        recreate{
           fragment = null then new instance
        }
    
    }
    
    Fragment{
        if((activity).fragment != null) {
           findViewById()
        }
    
    }
    shuabing
    fuente