java - 如何在运行时在由 android studio 创建的导航抽屉中设置默认片段
问题描述
下面是MainActivity
由 android studio 导航抽屉活动生成的类,它包含 3 个名为 home、gallery 和 slideshow 的片段,以及如何在运行时更改默认片段
public class MainActivity extends AppCompatActivity {
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);
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
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();
}
});
// 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_gallery, R.id.nav_slideshow,R.id.nav_home)
.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();
}
}
解决方案
最初,必须在navGraph
usingapp:startDestination
属性中设置第一个/默认片段(起始目的地),否则您将获得一个RuntimeException
of android.view.InflateException: Binary XML file line #10: Error inflating class fragment
.
因此,您的问题的答案是:您不能以编程方式设置默认片段,因为您必须首先在 xml 中设置它。但是您可以做的是在向用户显示默认片段之前,在方法中从默认导航startDestination
到另一个目标片段。onCreate()
NavController
负责在navGraph
.
类中有几个navigate()
方法的重载版本NavController
,允许您在片段之间导航。
例如,要将事务设置为 Gallery 片段,您可以将其 id 传递给navigate()
方法
protected void onCreate(Bundle savedInstanceState) {
...
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
navController.navigate(R.id.nav_gallery);
...
推荐阅读
- javascript - 从 XML 获取数据并在 HTML 上显示 - 输入变量
- javascript - 如何自定义视频全屏?
- token - 当我将 CLI 与 CI 系统一起使用时,我没有获得令牌
- kubernetes - 如何保护 Istio Operator?
- android - @Compose 生成的代码位于 android 项目文件夹结构中的什么位置?
- r - 关于 Tibble 的基本了解
- java - 使用 OOPS 概念和 Java 最佳实践设计高级模式
- python-3.x - discord.py gif 命令不发送 gif
- swift - 如何为堆栈视图设置约束?
- python - VSCode 中的 Python:为什么单元格输出可以设置为 HTML,而其他的只能设置为文本?