这段代码用于创建一个具有导航抽屉和工具栏的主活动。它使用了Android Jetpack库中的Navigation组件来管理导航和目的地。

onCreate()方法中,我们首先使用Data Binding将布局文件与活动绑定。然后,我们设置工具栏和浮动操作按钮的行为。浮动操作按钮的点击事件会弹出一个Snackbar。

接下来,我们获取抽屉布局和导航视图,并为菜单项设置了一个顶级目的地的集合。这样,当导航至这些目的地时,导航视图会高亮显示适当的菜单项。

然后,我们使用Navigation组件来设置工具栏和导航视图与NavController的关联,并处理导航视图中的导航点击事件。

onCreateOptionsMenu()方法中,我们将菜单资源文件与菜单对象关联起来,以便在工具栏中显示菜单项。

最后,在onSupportNavigateUp()方法中,我们将导航返回按钮与NavController的导航操作关联起来。当点击返回按钮时,将执行NavController的导航操作。

要添加新的按钮控件并响应其点击事件,你可以在菜单资源文件中定义一个新的菜单项,并在onCreateOptionsMenu()方法中将其与菜单对象关联。然后,在onOptionsItemSelected()方法中处理该菜单项的点击事件。

private AppBarConfiguration mAppBarConfiguration;
private ActivityMainBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    setSupportActionBar(binding.appBarMain.toolbar);
    binding.appBarMain.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 = binding.drawerLayout;
    NavigationView navigationView = binding.navView;
    
    // 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)
            .setOpenableLayout(drawer)
            .build();
    
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main);
    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_content_main);
    return NavigationUI.navigateUp(navController, mAppBarConfiguration)
            || super.onSupportNavigateUp();
}
Android Jetpack Navigation: 创建主活动、导航抽屉和工具栏

原文地址: http://www.cveoy.top/t/topic/iZkL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录