如何在运行时在安卓工作室创建的导航抽屉中设置默认片段



下面是android studio导航抽屉活动生成的MainActivity类,其中包含3个片段,分别命名为主页、图库和幻灯片,以及如何在运行时更改默认片段

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();
}
}

这可以通过mobile_navigation.xml文件完成:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mobile_navigation2"
app:startDestination="@+id/nav_home">

您可以通过更改应用程序来更改目的地:startDestination,在这种情况下,它从nav_home开始。

最初,必须使用app:startDestination属性在navGraph内设置第一个/默认片段(起始-目的地(,否则将获得android.view.InflateException: Binary XML file line #10: Error inflating class fragmentRuntimeException

因此,问题的答案是:您不能以编程方式设置默认片段,因为您必须首先将其设置为xml。但是,您可以做的是在向用户显示默认片段之前,使用onCreate()方法从默认的startDestination导航到另一个目标片段。

CCD_ 8负责在CCD_。

NavController类中有几个重载版本的navigate()方法,允许您在片段之间导航。

例如,要将事务设置为Gallery片段,可以将其id传递给navigate()方法

protected void onCreate(Bundle savedInstanceState) {
...
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
navController.navigate(R.id.nav_gallery);
...

最新更新