Estoy desarrollando una aplicación que contiene 2 fragmentos y quiero mostrar ocultar según mi necesidad. El siguiente código tiene un ejemplo simple de mi problema. Esta sencilla actividad de fragmentación contiene 1 botón y un fragmento de lista.
Este sencillo ejemplo funciona a la perfección. pero no estoy satisfecho con mostrar el fragmento de ocultar. Si elimina layout.setVisibility (View.GONE); del código luego ft.hide (f); no ocultará fragmentos. De hecho, no estamos escondiendo un fragmento, sino un contenedor.
Mi pregunta es, ¿ES esta una forma de mostrar fragmentos ocultos? Si no es así, explique con el ejemplo probado 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
}
android
android-fragments
show-hide
abidkhan303
fuente
fuente
Respuestas:
No se meta con las banderas de visibilidad del contenedor: FragmentTransaction.hide / show lo hace internamente por usted.
Entonces, la forma correcta de hacer esto es:
O si está utilizando android.support.v4.app.Fragment
fuente
android.R.animator.fade_in
yandroid.R.animator.fade_out
?Además, puede hacer en un Fragmento (por ejemplo, cuando fallaron los datos del servidor):
fuente
getView()
Puede ser cuidadosonull
cuando aún no está inicializado.Hola, lo hace utilizando este enfoque, todos los fragmentos permanecerán en el contenedor una vez agregados inicialmente y luego simplemente revelaremos el fragmento deseado y ocultamos los demás dentro del contenedor.
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 es una vieja pregunta.
fuente
fuente
Prueba esto:
fuente
Desde mi código, en comparación con la solución anterior, la forma más sencilla es definir un diseño que contenga el fragmento, luego puede ocultar o mostrar el fragmento controlando el atributo de diseño que está alineado con la forma de vista general. En este caso, no se necesita código adicional y los atributos de implementación adicionales del fragmento se pueden mover al diseño externo.
fuente
Esto funcionó para mi
fuente
las respuestas aquí son correctas y me gustó @Jyo the Whiff idea de mostrar y ocultar la implementación de un fragmento, excepto que la forma en que lo tiene actualmente ocultaría el fragmento en la primera ejecución, así que agregué un ligero cambio en el que agregué la verificación y el espectáculo isAdded el fragmento si no es ya
fuente
En onCreate, después de setContentView, oculté dos fragmentos y los envié al administrador de fragmentos, pero no oculté el primer fragmento que servirá como hogar.
Ref: https://medium.com/@oluwabukunmi.aluko/bottom-navigation-view-with-fragments-a074bfd08711
fuente
Puede que sea demasiado tarde, pero podría ayudar a alguien en el futuro.
Esta respuesta es una modificación para
mangu23
responderSolo agregué un bucle for para evitar la repetición y para agregar fácilmente más fragmentos sin código repetitivo.
Primero necesitamos una lista de los fragmentos que deben mostrarse
Entonces tenemos que llenarlo con nuestros fragmentos.
Y necesitamos una forma de saber qué fragmento se seleccionó de la lista, por lo que necesitamos
getFragmentIndex
funciónY finalmente, el
displayFragment
método será así:De esta forma, podemos llamar
displayFragment(homeFragment)
por ejemplo.Esto mostrará automáticamente
HomeFragment
y ocultará cualquier otro fragmento en la lista.Esta solución le permite agregar más fragmentos al
fragmentList
sin tener que repetir lasif
declaraciones en ladisplayFragment
versión anterior.Espero que alguien lo encuentre útil.
fuente