invalidateOptionsMenu не вызывает onPrepareOptionsMenu () - PullRequest
0 голосов
/ 12 марта 2020

Из основного упражнения я просто пытаюсь изменить заголовок элемента "основного меню 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"

, но мне не очень нравится это решение

...