通过关注 this 和 this MO 帖子,我尝试将我的 android 项目的应用栏标题设置如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
setSupportActionBar(findViewById(R.id.toolbar));
navController = Navigation.findNavController(this, R.id.navHostFragment);
navController.addOnDestinationChangedListener((controller, destination, args) -> {
// Check if it's a root destination
NavGraph destinationGraph = destination.getParent();
boolean isRootDestination = destinationGraph != null &&
destinationGraph.getStartDestinationId() == destination.getId();
// Update back button accordingly
Objects.requireNonNull(getSupportActionBar())
.setDisplayHomeAsUpEnabled(!isRootDestination);
// Update activity title
setTitle(destination.getLabel());
});
}
<fragment
android:id="@+id/fragmentA"
...
android:label="Fragment A"
... >
<action
android:id="@+id/action_fragmentA_to_fragmentB"
app:destination="@id/fragmentB"
app:launchSingleTop="true" />
</fragment>
<fragment
android:id="@+id/fragmentB"
...>
<action
android:id="@+id/action_fragmentB_to_fragmentA"
app:destination="@id/fragmentA"
app:launchSingleTop="true" />
</fragment>
和
onCreate
的Fragment B
内部我用过:
requireActivity().setTitle("some title");
向前方向一切正常,但是当我按下片段 B 中的后退箭头时,片段 A 的标题变成“某个标题”!!有什么问题??
当我在片段 A 之前添加另一个具有预定义标题的片段(在 graph.xml 中,即 android:label="Fragment New")时,在片段 A 和新片段之间上下导航工作正常,AppBar 标题显示指定的内容。