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.

¿Cómo hacer que la navegación inferior se seleccione automáticamente al moverse de un fragmento a otro?

Estoy intentando crear un botón de acción que mueva de la pestaña de inicio a la pestaña de promociones.

En la pestaña de inicio hay un botón de acción que llevará a la pestaña de promociones. Sin embargo, cuando se hace clic en el botón de acción de promociones en la pestaña de inicio, la visualización se desplaza a la pestaña de promociones pero la navegación inferior sigue seleccionada en la pestaña de inicio.

Captura de pantalla de la pestaña de inicio:
Screenshot Home Fragment

Captura de pantalla de la pestaña de promociones:
Screenshot Promo Fragment

Este es mi código de botón de acción en la pestaña de inicio:

imagePromo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((MainActivity)getActivity()).selectFragment(2);
}
});

Este es mi código de selectfragment en MainActivity:

public void selectFragment(int position){
viewPager.setCurrentItem(position, true);
viewPager.dispatchSetSelected(true);

}

Este es mi código de navegación inferior en MainActivity:

@Override

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = findViewById(android.R.id.content);
viewPager = findViewById(R.id.viewpager);
viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
viewPager.setOffscreenPageLimit(pager_number);
navigation = findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(item -> {
switch (item.getItemId()) {
case R.id.navigation_home:
viewPager.setCurrentItem(0);
return true;
case R.id.navigation_category:
viewPager.setCurrentItem(1);
return true;
case R.id.navigation_promo:
viewPager.setCurrentItem(2);
return true;
case R.id.navigation_wishlist:
viewPager.setCurrentItem(3);
return true;
}
return false;
});
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para asegurarte de que la vista de navegación inferior se actualice cuando se hace clic en el botón de acción en el fragmento de inicio y se mueve al fragmento de promoción, necesitas actualizar manualmente el elemento seleccionado en la vista de navegación inferior. Para lograr esto, llama al método setChecked() en el elemento de menú correspondiente en el método setOnNavigationItemSelectedListener() de MainActivity.

    Aquí está el código actualizado:

    En el fragmento home:

        imagePromo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ((MainActivity)getActivity()).selectFragment(2);
            }
        });
    

    En MainActivity:

        navigation.setOnNavigationItemSelectedListener(item -> {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    viewPager.setCurrentItem(0);
                    break;
                case R.id.navigation_category:
                    viewPager.setCurrentItem(1);
                    break;
                case R.id.navigation_promo:
                    viewPager.setCurrentItem(2);
                    break;
                case R.id.navigation_wishlist:
                    viewPager.setCurrentItem(3);
                    break;
            }
    
            // Actualiza manualmente el elemento seleccionado
            item.setChecked(true);
            return false;
        });
    

    Al llamar a setChecked(true) en el elemento de menú seleccionado, se destacará en la vista de navegación inferior cuando el usuario navegue hacia el fragmento de promoción utilizando el botón de acción en el fragmento de inicio.

Comments are closed.