java - 如何从 Android 的内置导航抽屉中打开 Activity
问题描述
我见过很多人遇到同样的问题,但是当我尝试他们的解决方案时,它仍然无法从导航抽屉中打开活动。
我的 MainActivity 的代码
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
//region Properties
private AppBarConfiguration mAppBarConfiguration;
ImageButton settings_btn;
//endregion
@Override
protected void onStart() {
super.onStart();
ProductDatabase productDb = new ProductDatabase();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
settings_btn = findViewById(R.id.btn_settings);
settings_btn.setOnClickListener(v ->
startActivity(new Intent(MainActivity.this, SettingsActivity.class)));
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(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);
// 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_login, R.id.nav_treatments, R.id.nav_product, R.id.nav_about, R.id.nav_contactUs)
.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 onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
@Override
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.nav_booking) {
startActivity(new Intent(this, BookingActivity.class));
} else if (id == R.id.nav_home) {
} else if (id == R.id.nav_product) {
} else if (id == R.id.nav_treatments) {
} else if (id == R.id.nav_about) {
} else if (id == R.id.nav_contactUs) {
}
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
当我运行此代码并单击“预订”选项卡时。什么都没发生。Booking 以前是一个 Fragment,但现在我只想让它打开一个 Activity,而所有其他选项都打开 Fragment。提前致谢
解决方案
navigationView.setNavigationItemSelectedListener(this)
我没有在你的代码中看到这行代码。显然你没有设置监听器
推荐阅读
- python - 如何在 Pandas Dataframe 中拆分为几秒钟
- xctest - 在测试运行中多次实例化 XCTestCase 子类
- c# - 如何模拟对基本方法的调用?
- ios - 尝试为 iOS 构建颤振应用程序时遇到的问题
- google-sheets - 谷歌表格 - 总结独特的行
- sql - BigQuery:在多行中重复相同的计算值
- scala - Scala:具有共享参数的案例类?
- python - 读取 Nifi 流文件和创建 python(pandas) 数据框有什么问题?
- javascript - 在验证表单中添加提交按钮的功能 - Bootstrap 4
- ruby-on-rails - Rails friendly_id 删除用于生成 url 的非 ascii 字符