studio programacion herramientas fundamentos con avanzado aplicaciones android android-fragments show-hide

programacion - manual de android en pdf



Mostrar el fragmento de la piel en Android (6)

Además, puede hacerlo en un Fragmento (por ejemplo, cuando los datos del servidor fallaron):

getView().setVisibility(View.GONE);

Estoy desarrollando una aplicación que contiene 2 fragmentos y quiero mostrarlo según mi necesidad. El siguiente código tiene un ejemplo simple de mi problema. Esta Fragmentactivity simple contiene 1 botón y un listfragment.

Este simple ejemplo funciona sin defectos. pero no estoy satisfecho con mostrar el fragmento de piel. Si elimina layout.setVisibility (View.GONE); del código luego ft.hide (f); no esconderá fragmento De hecho, no estamos ocultando el fragmento que estamos ocultando contenedor.

Mi pregunta es: ¿ES esta una manera de mostrar fragmentos de piel? Si no es así, explique con ejemplos probados Cómo ocultar y mostrar fragmentos porque muchas personas se enfrentan a este problema.

public class MainActivity extends FragmentActivity implements OnClickListener { Fragment1 f; Button b; LinearLayout layout; Fragment myf; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b = (Button) findViewById(R.id.button1); layout = (LinearLayout) findViewById(R.id.ll); f = new Fragment1(); } @Override public void onClick(View v) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); if (f.isHidden()) { ft.show(f); layout.setVisibility(View.VISIBLE); b.setText("Hide"); } else { ft.hide(f); b.setText("Show"); layout.setVisibility(View.GONE); } ft.commit(); // TODO Auto-generated method stub }


Esto funcionó para mí

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); if(tag.equalsIgnoreCase("dashboard")){ DashboardFragment dashboardFragment = (DashboardFragment) fragmentManager.findFragmentByTag("dashboard"); if(dashboardFragment!=null) ft.show(dashboardFragment); ShowcaseFragment showcaseFragment = (ShowcaseFragment) fragmentManager.findFragmentByTag("showcase"); if(showcaseFragment!=null) ft.hide(showcaseFragment); } else if(tag.equalsIgnoreCase("showcase")){ DashboardFragment dashboardFragment = (DashboardFragment) fragmentManager.findFragmentByTag("dashboard"); if(dashboardFragment!=null) ft.hide(dashboardFragment); ShowcaseFragment showcaseFragment = (ShowcaseFragment) fragmentManager.findFragmentByTag("showcase"); if(showcaseFragment!=null) ft.show(showcaseFragment); } ft.commit();


Hola, lo haces usando este enfoque, todos los fragmentos permanecerán en el contenedor una vez que se agreguen inicialmente y luego simplemente revelaremos el fragmento deseado y ocultaremos los otros dentro del contenedor.

// Within an activity private FragmentA fragmentA; private FragmentB fragmentB; private FragmentC fragmentC; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { fragmentA = FragmentA.newInstance("foo"); fragmentB = FragmentB.newInstance("bar"); fragmentC = FragmentC.newInstance("baz"); } } // Replace the switch method protected void displayFragmentA() { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); if (fragmentA.isAdded()) { // if the fragment is already in container ft.show(fragmentA); } else { // fragment needs to be added to frame container ft.add(R.id.flContainer, fragmentA, "A"); } // Hide fragment B if (fragmentB.isAdded()) { ft.hide(fragmentB); } // Hide fragment C if (fragmentC.isAdded()) { ft.hide(fragmentC); } // Commit changes ft.commit(); }

Consulte https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments para obtener más información. Espero poder ayudar a cualquiera. Incluso si esta es una vieja pregunta.


No te metas con las banderas de visibilidad del contenedor: FragmentTransaction.hide / show lo hace internamente por ti.

Entonces la forma correcta de hacer esto es:

FragmentManager fm = getFragmentManager(); fm.beginTransaction() .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out) .show(somefrag) .commit();

O si está usando android.support.v4.app.Fragment

FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction() .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .show(somefrag) .commit();


Prueba esto:

MapFragment mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.mapview); mapFragment.getView().setVisibility(View.GONE);


public void showHideFragment(final Fragment fragment){ FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); if (fragment.isHidden()) { ft.show(fragment); Log.d("hidden","Show"); } else { ft.hide(fragment); Log.d("Shown","Hide"); } ft.commit(); }