es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mostrar/Ocultar Fragmento en lugar de reemplazar.

Tengo 3 o más fragmentos y quiero acceder a ellos con el cajón.
Así que cuando haga clic en “Perfil”, el fragmento actual (es decir, Home) debería ocultarse y el fragmento “Perfil” debería mostrarse y viceversa…
En este momento funciona con “reemplazar fragmento”, pero en lugar de reemplazarlo, quiero mostrarlos/ocultarlos cuando hago clic en el botón del cajón.

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//mi código

reemplazarFragmento(new HomeFragment());
init();

}

private void init() {
mDrawer = (FlowingDrawer) findViewById(R.id.drawerlayout);
iv_Menu = findViewById(R.id.iv_Menu);
ll_Home = findViewById(R.id.ll_Home);
ll_Profile = findViewById(R.id.ll_Profile);
ll_Setting = findViewById(R.id.ll_Setting);
ll_Share = findViewById(R.id.ll_Share);
ll_Logout = findViewById(R.id.ll_Logout);

iv_Menu.setOnClickListener(this);
ll_Home.setOnClickListener(this);
ll_Profile.setOnClickListener(this);
ll_Setting.setOnClickListener(this);
ll_Share.setOnClickListener(this);
ll_Logout.setOnClickListener(this);

}

@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.iv_Menu:
mDrawer.openMenu(true);
break;

    case R.id.ll_Home:
        mostrarFragmento(ll_Home);
        mDrawer.closeMenu(true);
        break;

    case R.id.ll_Profile:
        mostrarFragmento(ll_Profile);
        mDrawer.closeMenu(true);
        break;

    case R.id.ll_Setting:
        startActivity(new Intent(this, SimplPreach.class));
        mDrawer.closeMenu(true);
        break;

    case R.id.ll_Share:
        Toast.makeText(this, "Compartir.", Toast.LENGTH_SHORT).show();
        mDrawer.closeMenu(true);
        break;

    case R.id.ll_Logout:
        Toast.makeText(this, "Cerrar sesión.", Toast.LENGTH_SHORT).show();
        mDrawer.closeMenu(true);
        break;
}

}

private void reemplazarFragmento(Fragment fragmento, String s) {
FragmentTransaction transacción = getSupportFragmentManager().beginTransaction();
transacción.replace(R.id.fl_Main,fragmento);
transacción.addToBackStack(s);
transacción.commit();
}

private void reemplazarFragmento(Fragment fragmento) {
FragmentTransaction transacción = getSupportFragmentManager().beginTransaction();
transacción.replace(R.id.fl_Main,fragmento);
transacción.commit();
}

private void mostrarFragmento(View view) {
Fragment fragmento;

switch (view.getId()) {
    case R.id.ll_Home:
        fragmento = new HomeFragment();
        break;

    case R.id.ll_Profile:
        fragmento = new ProfileFragment();
        break;

    default:
        fragmento = new HomeFragment();
        break;
}

FragmentTransaction transacción = getSupportFragmentManager().beginTransaction();
transacción.replace(R.id.fl_Main, fragmento);
transacción.commit();

}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar/ocultar fragmentos en lugar de reemplazarlos al hacer clic en el botón del cajón, puede utilizar los métodos de clase FragmentManager y FragmentTransaction para manejar la visibilidad de cada fragmento. Aquí hay un ejemplo de implementación:

    1. Cree un objeto FragmentTransaction en el método init ():
    private void init() {
        // ...
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.fl_Main, new HomeFragment(), "HomeFragment");
        transaction.add(R.id.fl_Main, new ProfileFragment(), "ProfileFragment");
        transaction.hide(getSupportFragmentManager().findFragmentByTag("ProfileFragment"));
        transaction.commit();
    }
    
    1. Modifique el método onClick() para mostrar/ocultar los fragmentos:
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.iv_Menu:
                mDrawer.openMenu(true);
                break;
    
            case R.id.ll_Home:
                getSupportFragmentManager().beginTransaction().hide(getSupportFragmentManager().findFragmentByTag("ProfileFragment")).show(getSupportFragmentManager().findFragmentByTag("HomeFragment")).commit();
                mDrawer.closeMenu(true);
                break;
    
            case R.id.ll_Profile:
                getSupportFragmentManager().beginTransaction().hide(getSupportFragmentManager().findFragmentByTag("HomeFragment")).show(getSupportFragmentManager().findFragmentByTag("ProfileFragment")).commit();
                mDrawer.closeMenu(true);
                break;
    
            // ...
        }
    }
    

    Note que estamos usando el parámetro tag para identificar de forma única cada fragmento al crearlos y encontrarlos. Además, en lugar de utilizar replace(), ahora estamos utilizando los métodos hide() y show() para cambiar la visibilidad de cada fragmento.

Comments are closed.