Android Jetpack Navigation: 创建主活动、导航抽屉和工具栏
这段代码用于创建一个具有导航抽屉和工具栏的主活动。它使用了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();
}
原文地址: http://www.cveoy.top/t/topic/iZkL 著作权归作者所有。请勿转载和采集!