Android reemplaza el fragmento actual con otro fragmento

Acabo de comenzar con el diseño de fragmentos para HoneyComb. Creé dos fragmentos. Cuando hago clic en un botón en el fragmento del lado izquierdo, se crea un nuevo fragmento en el lado derecho. Mientras tanto, cuando hago clic en un botón en el fragmento correcto (es decir, DetialsFragment en mi código a continuación debe ser reemplazado por otro fragmento. Main.xml

     

FragmentExample.java

 public class FragmentExample extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 

Titles.java

 public class Titles extends Fragment { public FragmentTransaction ft; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.main1, null); Button button1 = (Button)v.findViewById(R.id.button1); button1.setText("santhosh"); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentById(R.id.details); if (details == null || details.getShownIndex() != 1) { // Make new fragment to show this selection. details = DetailsFragment.newInstance(1); // Execute a transaction, replacing any existing // fragment with this one inside the frame. ft = getFragmentManager().beginTransaction(); ft.add(R.id.details, details, "detail"); ft.setTransition( FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } } }); return v; } } 

DetailsFragment.java

 public class DetailsFragment extends Fragment { /** * Create a new instance of DetailsFragment, initialized to * show the text at 'index'. */ Titles title = new Titles(); String[] titles = {"Title1", "Title2", "Title3", "Title4"}; public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } public int getShownIndex() { return getArguments().getInt("index", 0); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { // Currently in a layout without a container, so no // reason to create our view. return null; } Button button = new Button(getActivity()); button.setText("Next"); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); return button; } } 

Luego, siempre que se muestre su botón y se active el evento click, puede llamar a lo siguiente en su evento click:

 final FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.details, new NewFragmentToReplace(), "NewFragmentTag"); ft.commit(); 

y si desea volver a DetailsFragment al hacer clic atrás, asegúrese de agregar la transacción anterior a la stack posterior, es decir,

 ft.addToBackStack(null); 

¿O me estoy perdiendo algo? Alternativamente, algunas personas sugieren que su actividad obtiene el evento click para el botón y tiene la responsabilidad de reemplazar los fragmentos en su panel de detalles.

Use android.support.v4.app para FragmentManager & FragmentTransaction en su código, me ha funcionado.

 DetailsFragment detailsFragment = new DetailsFragment(); android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.details,detailsFragment); fragmentTransaction.commit(); 

Puedes probar el siguiente código. es un método muy fácil para insertar un fragmento nuevo de un fragmento antiguo.

 private int mContainerId; private FragmentTransaction fragmentTransaction; private FragmentManager fragmentManager; private final static String TAG = "DashBoardActivity"; public void replaceFragment(Fragment fragment, String TAG) { try { fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(mContainerId, fragment, tag); fragmentTransaction.addToBackStack(tag); fragmentTransaction.commitAllowingStateLoss(); } catch (Exception e) { // TODO: handle exception } } 

es muy simple cómo reemplazar con Fragment.

 DataFromDb changeActivity = new DataFromDb(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.changeFrg, changeActivity); transaction.commit();