Из основного упражнения я просто пытаюсь изменить заголовок элемента "основного меню c" (макет ящика, navigatonView, меню. xml, setNavigationItemSelectedListener в упражнении et c .. ) во время выполнения (minSdkVersion 23, targetSdkVersion 29).
По сути, в общих настройках есть переменная, относящаяся к «зарегистрированному пользователю», и я хотел бы установить эту строку в качестве заголовка элемента или восстановить элемент по умолчанию title (хранится в строке. xml), если пользователь "отключен".
Как предлагается в других Q / A, таких как этот , например, я пытаюсь позвонить invalidateOptionsMenu (), который должен вызывать onPrepareOptionsMenu (), который я переопределил с помощью моего «logi c».
NavigationView основной активности
<androidx.drawerlayout.widget.DrawerLayout.....>
........
<com.google.android.material.navigation.NavigationView
android:id="@+id/main_drawer_navigationView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="@drawable/background_gradient_orange"
android:fitsSystemWindows="false"
app:itemTextColor="@android:color/white"
app:itemIconTint="@android:color/white"
app:menu="@menu/drawer_menu"
app:headerLayout="@layout/nav_header_main"/>
</androidx.drawerlayout.widget.DrawerLayout>
Единственный метод, переопределенный для menu
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
sharedPreferences.getString(CURRENT_EXT_USER,null)?.let {
menu?.findItem(R.id.menu_item_change_user)?.title = it
}?: kotlin.run {
menu?.findItem(R.id.menu_item_change_user)?.title = getString(R.string.item_change_user)
}
return super.onPrepareOptionsMenu(menu)
}
Проблема в том, что onPrepareOptionsMenu () никогда не запускается, даже когда создается действие или когда вызывается invalidateOptionsMenu ().
Я также пытался: override fun onCreateOptionsMenu (menu: Menu?): Boolean {вернуть true}, но ничего не произошло. Единственный способ заставить его работать, это сделать это «вручную» с
main_drawer_navigationView.menu.findItem( R.id.menu_item_change_user).title = "user"
, но мне не очень нравится это решение