tutorial transaction supportfragmentmanager from example definicion crear begintransaction begin android fragmenttransaction

transaction - fragment android definicion



java.lang.IllegalArgumentException: No se ha encontrado una vista para el id. 0x1020002(android: id/content) para el fragmento (13)

Cuando utilice fragmentTransaction.replace(R.id.container,fragment) , eliminará cualquier fragmento que ya esté en el contenedor y agregará uno nuevo al mismo contenedor.

Ahora puedo sugerirte 2 cosas. Primero, si quieres usar fragmentTransaction.replace(android.R.id.content, fragment); que está haciendo en este momento, entonces no configure el contenido para su Activity usando setContentView . Esto debería funcionar bien entonces. Para saber qué es exactamente android.R.id.content puede referirse a esta pregunta y respuesta de stackoverflow

O, en segundo lugar, en el diseño de su Activity tenga un FrameLayout cuya identificación sea content . Y luego usar

fragmentTransaction.replace(R.id.content, fragment); fragmentTransaction.addToBackStack(null);//add the transaction to the back stack so the user can navigate back // Commit the transaction fragmentTransaction.commit();

Espero que esto ayude.

Más información:

Por sus comentarios, parece que tiene algún problema para tener la idea de utilizar FrameLayout en el FrameLayout de su Activity (no en ninguno de los Fragment del Fragment ). De los Documents

FrameLayout está diseñado para bloquear un área en la pantalla para mostrar un solo elemento. Generalmente, FrameLayout se debe usar para mantener una sola vista secundaria, ya que puede ser difícil organizar las vistas secundarias de una manera que se pueda escalar a diferentes tamaños de pantalla sin que los niños se superpongan entre sí.

Por lo tanto, el propósito principal de FrameLayout es bloquear el área requerida para que se ajuste a la vista infantil más grande. Si usa un FrameLayout como contenedor de Fragment , puede asegurarse de tener siempre el espacio disponible para acomodar el diseño del Fragment más grande.

Así que puedes tener tu FrameLayout algo como esto en el archivo xml de diseño de tu Activity

<FrameLayout android:id="@+id/content" android:layout_height="match_parent" android:layout_width="match_parent"> <!--you can put your existing views of your current xml here, so yes your entire xml is now inside this FrameLayout --> </FrameLayout>

Estoy tratando de pasar de un fragmento a otro. Muestra el siguiente error durante la transacción del fragmento.

java.lang.IllegalArgumentException: No view found for id 0x1020002 (android:id/content) for fragment PhotosFragment2{41a57218 #3 id=0x1020002} at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:930) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:153) at android.app.ActivityThread.main(ActivityThread.java:5086) 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:821) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) at dalvik.system.NativeStart.main(Native Method)

A continuación se muestran las clases. He utilizado el siguiente código para la transacción de fragmentos

Fragment fragment = new PhotosFragment2(); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment); fragmentTransaction.commit();

PhotosFragment.java

public class PhotosFragment extends Fragment { private FragmentActivity myContext; @Override public void onAttach(Activity activity) { myContext = (FragmentActivity) activity; super.onAttach(activity); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.photos, container, false); rootView.setVerticalScrollBarEnabled(false); int[] mThumbIds = { R.drawable.album8, R.drawable.album3, R.drawable.album4, R.drawable.album8, R.drawable.album6, R.drawable.album7, R.drawable.album12, R.drawable.album10, }; int[] mThumbIds2 = { R.drawable.album8, R.drawable.album3, R.drawable.album4, R.drawable.album6, R.drawable.album7, R.drawable.album9, R.drawable.album10, R.drawable.album11, R.drawable.album12, R.drawable.album8, R.drawable.album8, R.drawable.album3, R.drawable.album4, R.drawable.album6, R.drawable.album7, R.drawable.album9, R.drawable.album10, R.drawable.album11, R.drawable.album12, R.drawable.album8, }; CustomGridSingle2 adapter = new CustomGridSingle2(myContext, mThumbIds); GridView grid = (GridView)rootView.findViewById(R.id.gridView); final ImageView img= (ImageView)rootView.findViewById(R.id.imageView7); grid.setFocusable(false); grid.setAdapter(adapter); grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fragment fragment = new PhotosFragment2(); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment); fragmentTransaction.commit(); } }); CustomGridSingle2 adapter2 = new CustomGridSingle2(myContext, mThumbIds2); GridView grid2 = (GridView)rootView.findViewById(R.id.gridView2); grid2.setFocusable(false); grid2.setAdapter(adapter2); grid2.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fragment fragment = new PhotosFragment2(); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment); fragmentTransaction.commit(); } }); return rootView; } }

PhotosFragment2.java

public class PhotosFragment2 extends Fragment { private FragmentActivity myContext; @Override public void onAttach(Activity activity) { myContext = (FragmentActivity) activity; super.onAttach(activity); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); View rootView = inflater.inflate(R.layout.photos2, container, false); myContext.getActionBar().hide(); return rootView; } }

Archivo xml de actividad

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/left_drawer_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:background="@drawable/bgmenu" android:orientation="vertical"> <RelativeLayout android:id="@+id/profilelayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0" android:paddingTop="10dp"> <ImageView android:id="@+id/drawer_profile_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/drawer_profile_background" android:layout_alignLeft="@+id/drawer_profile_background" android:layout_alignRight="@+id/drawer_profile_background" android:layout_alignTop="@+id/drawer_profile_background" android:layout_marginBottom="7.667dp" android:layout_marginLeft="6.5dp" android:layout_marginRight="8.3dp" android:layout_marginTop="7.667dp" android:scaleType="centerCrop"></ImageView> <ImageView android:id="@+id/drawer_profile_background" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:scaleType="centerCrop" android:src="@drawable/profileblock"> </ImageView> <ImageView android:id="@+id/settingicon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/drawer_profile_background" android:layout_marginLeft="-15dp" android:layout_toRightOf="@+id/drawer_profile_background" android:background="@drawable/settings" /> <textview android:id="@+id/username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/drawer_profile_background" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:text="Name" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:textColor="@android:color/white" /> </RelativeLayout> <ListView android:id="@+id/list_slidermenu" style="@style/buttonStyle" android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginTop="30dp" android:layout_weight="2" android:cacheColorHint="@android:color/transparent" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="1dp" android:listSelector="@android:color/transparent" android:scrollbars="none" /> </LinearLayout> </android.support.v4.widget.DrawerLayout>


Debe establecer una vista de contenido en su Actividad a la que se adjunte su PhotosFragment.

protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.activity_main); //... }


Desde Android 4.2 (API 17), los fragmentos anidados están disponibles. Ver this

Para colocar el fragmento dentro de otro fragmento use getChildFragmentManager()

También disponible en la biblioteca de soporte.


El problema puede ser que agregue un fragmento y beginTransaction en algún fragmento como

getFragmentManager().beginTransaction().replace(android.R.id.content, ImageBrowseFragment.newInstance(bundle),"ImageBrowseFragment") .addToBackStack(null).commit();

Acabo de cambiar getFragmentManager() por getActivity().getSupportFragmentManager()

Entonces todo va bien

Cuando agrega un fragmento en un fragmento, use android.R.id.content o Window.ID_ANDROID_CONTENT , supongo que representa el contenedor raíz de su fragmento, no la actividad. Así que cambie a getActivity().getSupportFragmentManager() lo resuelve


En mi caso tuve que cambiar.

ViewGroup root = (ViewGroup) inflater.inflate(R.layout.sample, container);

a

ViewGroup root = (ViewGroup) inflater.inflate(R.layout.sample, container, false);


Esta respuesta resalta un error tonto que puede ocurrir, que surge cuando se anidan fragmentos o está convirtiendo las actividades en fragmentos.

Si está intentando reemplazar un fragmento dentro de un fragmento con fragmentManager pero no está inflando el fragmento principal 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);


Hay 2 razones más comunes para este problema

  1. Especificar el diseño incorrecto en setContentView () del método onCreate ()
  2. También se produce un error al tener fragmentos anidados y agregarlos con getSupportFragmentManager () en lugar de getChildFragmentManager ()

Espero que esto ayude

Sumado


No uso getSupportFragmentManager() . Yo uso getChildFragmentManager() y funcionó para mí. Puedes probarlo.


Ponga este bloque de código en el método onCreateView de PhotosFragment2:

View rootView = inflater.inflate(R.layout.photos2, null);

en lugar de:

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


Sé que esto es muy tarde. Pero puede funcionar para otros.

Declaré el id para cada diseño, como (3ra línea abajo)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container"


Si está tratando de poner Fragment en Fragment , use getChildFragmentManager()


Si está utilizando ViewPager, use getChildFragmentManager () para el adaptador de buscapersonas

viewPager.setAdapter(new ItemsAdapter(getChildFragmentManager()));


Tuve el mismo error y, después de probar muchas cosas, encontré que el problema estaba en "id" y "getActivity (). GetSupportFragmentManager ()".

Antes de implementar me gustan estos

txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { getChildFragmentManager() .beginTransaction() .replace(R.id.content_frame, new OpportunitiesFragment()) .commit(); } });

Entonces me cambié a estos

txt_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ## Heading ## getActivity().getSupportFragmentManager() .beginTransaction() .replace(android.R.id.content, new OpportunitiesFragment()) .commit(); } });