Fragmento de llamada del fragmento

Tengo una actividad con el botón en él y cuando un tecleo llamo el fragmento con otro botón en el fragmento. Pero cuando haga clic en el botón del fragmento no puedo llamar a un segundo fragmento. Esta es mi fuente, bastante simple: activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context=".MainActivity" > <Button android:id="@+id/btn_click" android:text="Call Fragment" android:layout_height="wrap_content" android:layout_width="fill_parent" android:onClick="onClick" /> </LinearLayout> 

Fragment1.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f0f0f0" android:orientation="vertical" > <TextView android:id="@+id/fragment1" android:text="Fragment 1" android:textSize="25sp" android:gravity="center" android:layout_height="wrap_content" android:layout_width="fill_parent" /> <Button android:id="@+id/btn_frag2" android:text="Call Fragment 2" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 

Fragment2.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f0f0f0" android:orientation="vertical" > <TextView android:id="@+id/fragment2" android:text="Fragment 2" android:textSize="25sp" android:gravity="center_vertical|center_horizontal" android:layout_height="wrap_content" android:layout_width="fill_parent" /> </LinearLayout> 

MainActivity.java

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void onClick(View v) { Fragment1 fragment1 = new Fragment1(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment1); fragmentTransaction.commit(); } } 

Fragment1.java

 public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment1, container, false); } public void onClick2(View view) { Fragment2 fragment2 = new Fragment2(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.fragment1, fragment2); fragmentTransaction.commit(); } } 

Fragment2.java

 public class Fragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment2, container, false); } } 

Lo que está mal en mi código?

6 Solutions collect form web for “Fragmento de llamada del fragmento”

Creo que ahora Fragmento de anidación está disponible sólo actualizar la espalda computability jar

Ahora permite cavar en el problema de sí mismo.

 public void onClick2(View view) { Fragment2 fragment2 = new Fragment2(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.fragment1, fragment2); fragmentTransaction.commit(); } 

Creo que el R.id.fragment1 pertenece a un TextView que no es un buen lugar para incluir las vistas de los niños en porque no es un ViewGroup , puede quitar el textView del xml y reemplazarlo con un LinearLayout permite decir y funcionará, Si no me dice cuál es el error.

Fragment1.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f0f0f0" android:orientation="vertical" > <LinearLayout android:id="@+id/fragment1" android:layout_height="wrap_content" android:layout_width="fill_parent" /> <Button android:id="@+id/btn_frag2" android:text="Call Fragment 2" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 

Actualizar el error en el comentario

 public class Fragment1 extends Fragment implements OnClickListener{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment1, container, false); ((Button) v.findViewById(R.id.btn_frag2)).setOnClickListener(this); return v; } public void onClick(View view) { Fragment2 fragment2 = new Fragment2(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.container, fragment2); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } } 

Si desea reemplazar todo el Fragmento1 con Fragmento2, debe hacerlo dentro de MainActivity, utilizando:

 Fragment1 fragment2 = new Fragment2(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment2); fragmentTransaction.commit(); 

Apenas ponga este código dentro de un método en MainActivity, entonces llame ese método de Fragment1.

Esta es mi respuesta que resolvió el mismo problema. Fragment2.java es la clase fragment que contiene el diseño de fragment2.xml.

 public void onClick(View v) { Fragment fragment2 = new Fragement2(); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.frame_container, fragment2); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } 

Yo usaría un oyente. Fragmento1 llamando al oyente (actividad principal)

Este código funciona para mí para llamar al método parent_fragment de child_fragment.

ParentFragment parent = (ParentFragment) activity.getFragmentManager (). FindViewById (R.id.contaniner);

Parent.callMethod ();

Sólo haz eso: getTabAt (índice de tu pestaña)

  ActionBar actionBar = getSupportActionBar(); actionBar.selectTab(actionBar.getTabAt(0)); 
  • Nuevo patrón de fragmentos de actividad para Android Studio 1.4
  • Cómo pasar el resultado del segundo fragmento al primer fragmento
  • DialogFragment de Android vs Diálogo
  • ViewPager dentro de Fragmento pierde contenido al volver a él
  • ¿Por qué se crea un FrameLayout extra para fragmentos?
  • ¿Cuál es la diferencia entre commit () y commitAllowingStateLoss () en Fragments
  • Reemplazar fragmento con otro fragmento dentro de ViewPager
  • Mejor práctica para actualizar los argumentos de un fragmento?
  • La adición dinámica de fragmentos con diseño xml a GridLayout no es workng
  • Cómo pausar / reanudar un fragmento
  • Actualización de ImageView Bitmap dentro del fragmento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.