Ничего не происходит при нажатии элемента панели навигации - PullRequest
0 голосов
/ 22 сентября 2019

Я использовал пример навигационной активности Google.В этом я изменил элементы панели навигации.Я хочу начать новое действие при нажатии на элемент.

Я также добавил событие onNavigationItemClicked, но когда я нажимаю на элемент, ничего не происходит.

public class MainActivity extends AppCompatActivity{

private AppBarConfiguration mAppBarConfiguration;
private TextView name, email;
private DrawerLayout drawer;
private Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    context = this;
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            switch (menuItem.getItemId()){
                case R.id.nav_my_printers:
                    Intent intent = new Intent(context, MyPrintersActivity.class);
                    startActivity(intent);
                    break;
                case R.id.nav_settings:
                    Toast.makeText(context, "Not yet Implemented", Toast.LENGTH_SHORT).show();
            }
            return false;
        }
    });
    View headerView = navigationView.getHeaderView(0);
    name = headerView.findViewById(R.id.name);
    email = headerView.findViewById(R.id.email);

    name.setText(SessionClass.getUserInSession().getName());
    email.setText(SessionClass.getUserInSession().getEmail());

    // 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_my_printers, R.id.nav_settings)
            .setDrawerLayout(drawer)
            .build();
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onSupportNavigateUp() {
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    return NavigationUI.navigateUp(navController, mAppBarConfiguration)
            || super.onSupportNavigateUp();
}

}

1 Ответ

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

Линия

NavigationUI.setupWithNavController(navigationView, navController);

Вызывает setNavigationItemSelectedListener внутренне для подключения адресатов к пунктам меню.Это переопределяет установленное вами представление OnNavigationItemSelectedListener.

Навигация поддерживает <activity> пунктов назначения, что позволяет использовать стандартные функции setupWithNavController из коробки.Вы бы добавили пункт назначения активности на график, который использует тот же идентификатор, что и ваш элемент меню:

<activity
  android:id="@+id/nav_my_printers"
  android:name=".MyPrintersActivity"/>

Тогда значение по умолчанию setupWithNavController будет вызывать startActivity для вас.

...