Estoy creando una aplicación que contiene Actividad del cajón de navegación. Estoy cargando diferentes fragmentos en mi pantalla principal. Ahora, cuando tengo que llamar a Fragment en ese momento, funciona bien, pero cuando quiero llamar a algún tipo de servicio como llamada, selector de imágenes en ese momento, agregué setNavigationItemSelectedListener, que funciona bien, pero todos los demás fragmentos no se están cargando ahora.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow, R.id.nav_franchise,
R.id.nav_tieUP, R.id.nav_giftVoucher, R.id.nav_faq, R.id.nav_privacy_policy,
R.id.nav_tools, R.id.nav_send)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.callUs) {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + "XXXxxxXXX"));
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE},REQUEST_PHONE_CALL);
}
else
{
startActivity(intent);
}
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
});
}
Solución del problema
Cuando llamas NavigationUI.setupWithNavController(navigationView, navController)
, estás diciendo que quieres NavController
manejar eventos de clic desde tu NavigationView, navegando a la pantalla relacionada según la documentación de NavigationUI. Esto, por necesidad, llama setNavigationItemSelectedListener()
internamente.
Al llamar setNavigationItemSelectedListener
después, elimina el oyente original, por lo que sus otros elementos ya no hacen nada. Puede desencadenar el comportamiento predeterminado llamandoNavigationUI.onNavDestinationSelected()
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
int id = menuItem.getItemId();
if (id == R.id.callUs) {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + "XXXxxxXXX"));
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE},REQUEST_PHONE_CALL);
}
else
{
startActivity(intent);
}
}
else
{
// Make your navController object final above
// or call Navigation.findNavController() again here
NavigationUI.onNavDestinationSelected(menuItem, navController);
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
No hay comentarios:
Publicar un comentario