Заголовок фрагмента остается на заголовке предыдущего фрагмента, когда я нажимаю кнопку "Назад"
Следуя этому и этому сообщениям 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());
});
}
фрагменты_Graph.xml
<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 становится «каким-то заголовком» !! В чем проблема??
Когда я добавляю еще один фрагмент с предопределенным заголовком (вgraph.xml, т.е. android:label="Fragment New") перед фрагментом A, навигация вверх и назад между фрагментами A и New работает нормально, а заголовок AppBar показывает то, что указано.
Обновлять:
Я пытался использовать следующее, но проблема остается прежней (т.е. Фрагмент A -> Новая метка! (фрагмент B) и в обратном направлении: Новая метка! -> Новая метка! (фрагмент A)):
if(destination.getLabel()==null){
destination.setLabel("New Label!");
setTitle(destination.getLabel());
} else {
setTitle(destination.getLabel());
}