Как настроить ящик навигации по умолчанию и выбрать разные фрагменты? - PullRequest
0 голосов
/ 21 сентября 2019

Я начинающий разработчик, и я интегрирую стандартный блок навигации в мое приложение с androidx.У меня проблемы с навигацией по фрагментам, так как она не работает, когда я нажимаю на элементы меню ящика.Есть два фрагмента, которые связаны с их идентификаторами и устанавливают прослушиватель onClick, но это не работает.Он просто показывает основной фрагмент, но не перемещается к другим фрагментам.

Я не знаком с функциями по умолчанию, такими как onCreateOptionsMenu(Menu menu) и onSupportNavigateUp(), которые создаются сами по себе, когда я создавал задание по умолчанию, поэтому я просто комментирую эти функции и, следуя руководству, реализую NavigationView.OnNavigationItemSelectedListener, которая дает мне функцию onNavigationItemSelected(@NonNull MenuItem item), где я написал код для навигации по фрагментам.Но это не сработало, и когда я отлаживаю, это показывает, что onNavigationItemSelected(@NonNull MenuItem item) не вызывается.

public class FindBarber extends AppCompatActivity implements.

NavigationView.OnNavigationItemSelectedListener {


private AppBarConfiguration mAppBarConfiguration;
ActionBarDrawerToggle toggle;
Toolbar toolbar;
DrawerLayout drawer;
NavigationView navigationView;
int OPEN, CLOSE;


 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_find_barber);
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    drawer = findViewById(R.id.drawer_layout);
    navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    toggle = new ActionBarDrawerToggle(this, drawer, toolbar, OPEN, CLOSE);
    drawer.addDrawerListener(toggle);
    toggle.syncState();


    // 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_profile, R.id.nav_kutit_wallet,
            R.id.nav_terms_of_use, R.id.nav_rate_the_app, R.id.nav_contact_us)
            .setDrawerLayout(drawer)
            .build();*/
   /* NavController navController = Navigation.findNavController(this, R.id.content_frame);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);*/

       FragmentManager fmanager = getSupportFragmentManager();
       fmanager.beginTransaction().replace(R.id.content_frame, new GMap()).commit();


}

/*@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.find_barber, menu);
    return true;
}
*/
 // @Override
/* public boolean onSupportNavigateUp() {
    *//*NavController navController = Navigation.findNavController(this, R.id.content_frame);*//*
    return NavigationUI.navigateUp(navController, mAppBarConfiguration)
            || super.onSupportNavigateUp();
}*/

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {

    switch (item.getItemId())
    {
        case R.id.nav_home:
            getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, new GMap()).commit();
            break;

        case R.id.nav_profile:
            getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, new Profile()).commit();
            break;
    }
    drawer.closeDrawer(GravityCompat.START);
    return true;
}
}

Нет сообщения об ошибке и не происходит сбой приложения.Когда я щелкаю элемент ящика навигации для навигации по любому фрагменту, он не показывает ничего, кроме основного фрагмента по умолчанию, который я показываю на экране.

1 Ответ

0 голосов
/ 21 сентября 2019

Вызов loadFragment (новый Fragment (), «Мой фрагмент») onNavigationItemSelected

public void loadFragment(Fragment fragment, String title_name){  
 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();  
 fragmentTransaction.replace(R.id.customer_container,fragment,title_name);
 fragmentTransaction.addToBackStack(fragment.getClass().getSimpleName());
 fragmentTransaction.commit();
 }
...