1

introducir la descripción de la imagen aquí Mi problema es que intento abrir determinado fragment dependiendo del usuario que esté usando la aplicación, pero el código con el que intenté simplemente no funciona. .

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{

    private NavController nc, nc2;
    private DrawerLayout drawer;
    private NavigationView nv;
    private AppBarConfiguration abc;
    private EditText nombree;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        drawer = findViewById(R.id.drawer_layout);
        nv = findViewById(R.id.nav_view);
        nombree = findViewById(R.id.et_ciudad);

        abc = new AppBarConfiguration.Builder(
                R.id.nav_inicio, R.id.nav_perfil, R.id.nav_chat,
                R.id.nav_favoritos, R.id.nav_buscar,
                R.id.nav_configuracion, R.id.nav_ayuda)
                .setDrawerLayout(drawer)
                .build();
        nc = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupWithNavController(nv, nc);
    }

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        int id = item.getItemId();
        FragmentManager fm = getSupportFragmentManager();
        switch(id){
            case R.id.nav_chat:
                break;
            case R.id.nav_perfil:
                String nombre = nombree.getText().toString();

                if(nombre == "Repartidor"){
                    fragment_contenedor_perfil_a fa = new fragment_contenedor_perfil_a();
                    fm.beginTransaction().replace(R.id.nav_host_fragment,fa).commit(); }
                else{
                    fragment_contenedor_perfil_b fb = new fragment_contenedor_perfil_b();
                    fm.beginTransaction().replace(R.id.nav_host_fragment,fb).commit(); }
                break;}
        return true;}}

. Gracias por leer!

Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • 2
    Bienvenido a StackOverflow, te recomiendo que si tienes algo avanzado lo adjuntes en la pregunta para poder darte una respuesta de acuerdo a lo que necesitas. Revisa [Cómo preguntar](https://es.stackoverflow.com/help/how-to-answer) para más información. Saludos ;) – Israel-ICM Dec 23 '19 at 18:37
  • Gracias por la ayuda hermano. Voy a agregarlo para que sea más entendible! – Tomas Menniti Dec 24 '19 at 16:47
  • @TomasMenniti revisando tu pregunta he visto cual es el problema, se debe a la forma en la cual tratas de realizar la comparación de la cadena. – Jorgesys Dec 27 '19 at 17:14

1 Answers1

0

De acuerdo a tu código, tu layout activity_main.xml debe contener el FrameLayout con id nav_host_fragment que es donde se realizaría el reemplazo de los Fragments.

Pero noto un problema al tratar de obtener el usuario y realizar la comparación.

Recuerda como se realiza la comparación de Strings:

Operador != no funciona como espero en Java

En este caso, la comparación de cadenas la puedes realizar usando los métodos equals() o equalsIgnoreCase(), realiza el siguiente cambio:

  ...
  ...
     case R.id.nav_perfil:
                    String nombre = nombree.getText().toString();

                    //*Incorrecto if(nombre == "Repartidor"){

                    if(nombre.equalsIgnoreCase("Repartidor")){

                        fragment_contenedor_perfil_a fa = new fragment_contenedor_perfil_a();
                        fm.beginTransaction().replace(R.id.nav_host_fragment,fa).commit(); }
                    else{
                        fragment_contenedor_perfil_b fb = new fragment_contenedor_perfil_b();
                        fm.beginTransaction().replace(R.id.nav_host_fragment,fb).commit(); }
                    break;
          }
 ...
 ...
Jorgesys
  • 103,630
  • 13
  • 52
  • 124
  • 1
    Gracias Elena. Estoy algo confundido con tu respuesta en la parte en que mencionas que el setContentView debería contener el nav_host_fragment. 1er punto: "nav_host_fragment" es el nombre que por defecto asigna android studio a una vista de tipo "fragment" que viene en una activity llamada "content_main". En todo caso, no debería cambiar "activity_main" por "content_main"?. Agradecería que me aclares esta parte. – Tomas Menniti Dec 27 '19 at 20:50
  • Perdon tal vez fue más información que posiblemente no sea necesaria, dentro de activity_main.xml debes tener nav_host_fragment que al parecer es así, solo realiza el cambio de la comparación a : if(nombre.equalsIgnoreCase("Repartidor")){ – Jorgesys Dec 27 '19 at 20:52
  • 1
    Gracias. Me venis ayudando muy seguido. Como puedo votar tu respuesta como positiva?? – Tomas Menniti Dec 27 '19 at 22:58
  • Hola @TomasMenniti realiza el [tour] ahí se explica, saludos. – Jorgesys Dec 28 '19 at 03:11