Androidx настроить навигациюПоставить выбранное действие - PullRequest
0 голосов
/ 14 апреля 2020

Я создал активность в навигационном ящике с android студийным шаблоном (Navigation Drawer Activity). Теперь в androidx & android studio 3.5.3 они изменили реализацию активности навигатора. в классе java реализация выглядит так:

DrawerLayout 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_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);

И onCreateOptionsMenu принимают ContextMenu, View и ContextMenu.ContextMenuInfo вместо Menu

@Override
    public void onCreateOptionsMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.nav_drawer_main, menu);
    }

Но нет onOptionsItemSelected или onContextItemSelected метода. Итак, мой вопрос: если я хочу настроить событие щелчка элемента ящика, как я могу это сделать? предположим, что я хочу передать intentExtra фрагменту или мне нужно проверить значение переменной при конкретном c щелчке элемента.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Я выполнил работу с addOnDestinationChangedListener. В этом методе вы можете переключаться на идентификаторы, которые вы указали в методе AppBarConfiguration.Builder. В моей реализации я скрываю или показываю макет, основанный на событии click.

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) {
            //item with id nav_home found do your work
            main_activity_layout.setVisibility(View.VISIBLE);
            Toast.makeText(getApplicationContext(), "Nav Home Pressed!", Toast.LENGTH_SHORT).show();
         } else {
            main_activity_layout.setVisibility(View.GONE);
            Toast.makeText(getApplicationContext(), "onDestChangeElse!", Toast.LENGTH_SHORT).show();
         }
     }
  });
0 голосов
/ 14 апреля 2020

Осуществление навигации в AndroidX Drawer по-прежнему легкое, как и раньше

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        ...
        drawerLayout = findViewById(R.id.drawer_layout);
        navigationView = findViewById(R.id.nav_view);
        setupNavigation();
    }
    private void setupNavigation() {
        // link Toggle button with Drawer
        final ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
            drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
            {

                public void onDrawerClosed(View view)
                {
                    supportInvalidateOptionsMenu();
                    //drawerOpened = false;
                }

                public void onDrawerOpened(View drawerView)
                {
                    supportInvalidateOptionsMenu();
                    //drawerOpened = true;
                }
            };
            drawerToggle.setDrawerIndicatorEnabled(true);
            drawerLayout.setDrawerListener(drawerToggle);
            drawerToggle.syncState();
        }

        // Create Menu for NavigationView
        Menu menu = navigationView.getMenu();
        menu.add(category.getName());
        menu.getItem(0).setIcon(category.getIcon());
        menu.getItem(0).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem menuItem) {
                    drawerLayout.closeDrawers();

                    // TODO; Here's your sexy looking codes ;P must return false if you don't know what `true` do

                    return false;
                }
            });
    }
...