Внедрение Clicklistners в меню навигации

Я создал навигационную активность Android из студии Android. Теперь в этом действии, как мне реализовать прослушиватель кликов в меню навигационного ящика? Как и при щелчке пункта меню, как я могу выполнить какую-либо задачу. Действия: открытый класс MainActivity расширяет AppCompatActivity, реализует NavigationView.OnNavigationItemSelectedListener {

private AppBarConfiguration mAppBarConfiguration;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    mAppBarConfiguration = new AppBarConfiguration.Builder(
            R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
            R.id.nav_tools, R.id.nav_share, 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);
}

@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();
}

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

    switch (menuItem.getItemId()){
            case R.id.nav_home:
                Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }
}

person Umair Iqbal    schedule 08.10.2019    source источник
comment
вы должны использовать onNavigationItemSelected и различать элементы меню по их идентификаторам в menu.xml и выполнять задачу, которую вы хотите   -  person Arsalan Imtiaz    schedule 08.10.2019


Ответы (3)


используйте это как пример.

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
    switch (menuItem.getItemId()){
     case R.id.nav_home:
        Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
        break;
     case R.id.nav_otherId:
        //your action
        Toast.makeText(this, "Gallery", Toast.LENGTH_SHORT).show();
        break;
     case R.id.nav_otherId2:
        //your action
        Toast.makeText(this, "Next", Toast.LENGTH_SHORT).show();
        break;


}
return true;

}

person Arsalan Imtiaz    schedule 08.10.2019

3.5 приводит к неправильному переупорядочению XML и перемещению выше (и, следовательно, позади) основного содержимого в файле . Вам нужно будет переместить после (или что-то еще, что у вас может быть для основного контента). И бум, ты готов идти

и в джаве

navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
            @Override
            public void onDestinationChanged(@NonNull NavController controller, @NonNull
                    NavDestination destination, @Nullable Bundle arguments) {
                if (destination.getId() == R.id.nav_home) {
                    Toast.makeText(MainActivity.this, "home", Toast.LENGTH_LONG).show();
                }
                if (destination.getId() == R.id.nav_gallery) {
                    Toast.makeText(MainActivity.this, "nav_gallery", Toast.LENGTH_LONG).show();
                }
                if (destination.getId() == R.id.nav_slideshow) {
                    Toast.makeText(MainActivity.this, "nav_slideshow", Toast.LENGTH_LONG).show();
                }
                if (destination.getId() == R.id.nav_tools) {
                    Toast.makeText(MainActivity.this, "nav_tools", Toast.LENGTH_LONG).show();
                }
                if (destination.getId() == R.id.nav_share) {
                    Toast.makeText(MainActivity.this, "nav_share", Toast.LENGTH_LONG).show();
                }
                if (destination.getId() == R.id.nav_send) {
                    Toast.makeText(MainActivity.this, "nav_send", Toast.LENGTH_LONG).show();
                }
            }
        });
person Umair Iqbal    schedule 08.10.2019

Это то, что вы ищете:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    if(id == R.id.hello){
        Intent intent = new Intent(MainMenu.this, HelloActivity.class);
        startActivity(intent);
    }
    return super.onOptionsItemSelected(item);
}
person Juan Sancho    schedule 08.10.2019