Возможность поместить кнопку поиска на панель инструментов, но только для домашнего просмотра?

#android #kotlin

#Android #kotlin

Вопрос:

Я описываю свою проблему (я новичок в kotlin)…

Я хочу поместить кнопку поиска на панель инструментов в kotlin, потому что это приятно сравнивать с видом поиска. Но когда я пытаюсь это сделать, кнопка поиска становится доступной для всех видов (главная страница, загрузка, настройки с помощью панели навигации)

Можно создать условие «только для домашнего просмотра показывать кнопку поиска на панели инструментов»?

Комментарии:

1. Добавьте вид поиска в меню фрагмента главного экрана, тогда он будет отображаться только в домашнем фрагменте, другие экраны он показывать не будет

Ответ №1:

Во фрагменте домашнего просмотра добавьте свой элемент поиска в меню, чтобы при отображении этого фрагмента его опция поиска присутствовала в меню

 override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    // put your search menu item in this menu file
    inflater.inflate(R.menu.home_view, menu)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        R.id.action_search -> doSearchThing()
        ...
        else -> return super.onOptionsItemSelected(item)
    }
    return true
}
  

и вам нужно сообщить системе, что этот фрагмент хочет испортить меню:

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    setHasOptionsMenu(true)
    ...
}
  

Если ваш «домашний просмотр» — это Activity вместо a Fragment , поэтому вы хотите показывать кнопку поиска только в том случае, если определенные фрагменты не отображаются, вам придется ввести некоторую логику, onCreateOptionsMenu чтобы решить, следует ли removeItem использовать кнопку поиска в меню, и вызывать invalidateOptionsMenu() ее всякий раз, когда фрагменты меняются, и вам нужно разобратьсяпоказывать ли кнопку снова

Ответ №2:

Я предполагаю, что у вас есть панель инструментов на уровне активности, а затем несколько фрагментов, которые представляют разные экраны, обрабатываемые вашей панелью навигации.

Если я правильно понял вашу проблему, вы хотите, чтобы при выборе раздела home на панели инструментов отображалась кнопка поиска на панели инструментов и, возможно, другие кнопки или нет для других разделов.

 class MainActivity: AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navView.setOnNavigationItemSelectedListener {
            invalidateOptionsMenu()
            true
        }
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        return when(navView.selectedItemId) {
            R.id.navigation_home ->  {
                menuInflater.inflate(R.menu.menu_home, menu)
                true
            }
            R.id.navigation_dashboard -> {
                menuInflater.inflate(R.menu.menu_dashboard, menu)
                true
            }
            R.id.navigation_notifications -> {
                menuInflater.inflate(R.menu.menu_notifications, menu)
                true
            }
            else -> {
                super.onCreateOptionsMenu(menu)
            }
        }
    }
}
  

menu_search.xml

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@ id/item_search"
        app:showAsAction="always"
        android:title="Do search" />
</menu>
  

menu_dashboard.xml

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"/>
  

menu_notificationx.xml

 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"/>
  

ПРИМЕЧАНИЕ: я не использую здесь библиотеку навигации, не уверен, что это ваш случай

Другое решение — установить меню панели инструментов только для домашнего раздела