Расширения и меню Kotlin для Android

Есть ли способ получить доступ к элементу меню menu_item_search, определенному в макете fragment_photo_gallery, используя искусственные свойства вместо использования метода findItem?

override fun onCreateOptionsMenu(menu: Menu, menuInflater: MenuInflater) {
    super.onCreateOptionsMenu(menu, menuInflater)
    menuInflater.inflate(R.menu.fragment_photo_gallery, menu)

    //is there a way to access searchItem using synthetic properties?
    val searchItem = menu.findItem(R.id.menu_item_search)
}

person Igor    schedule 25.08.2016    source источник
comment
Вы ознакомились с Расширения Kotlin для Android — язык программирования Kotlin? В настоящее время я не использую Kotlin для Android, но из того, что я могу сказать, вам просто нужно добавить импорт, например import kotlinx.android.synthetic.main.<layout>.*, и тогда вы сможете использовать синтетическое свойство с именем menu_item_search в своем коде активности.   -  person mfulton26    schedule 25.08.2016
comment
Да, действительно. Ваше «решение» работает только для макета, завышенного в методе onCreate (вы можете получить доступ к каждому элементу макета, ссылаясь на его имя). Макет меню завышен в onCreateOptionsMenu, и я не смог получить доступ к menu_item_search, используя его имя (синтетическая переменная).   -  person Igor    schedule 25.08.2016


Ответы (1)


MenuInflater служит принципиально иной цели, чем LayoutInflater.

Несмотря на то, что в названии есть часть «Inflater» и реализуются методы с именем «inflate()», они делают совершенно разные вещи. MenuInflater надувает Menus, где LayoutInflater надувает Views.

Расширения Kotlin для Android были созданы для упрощения использования представлений Android, а не меню Android, или все, что имеет метод inflate().

Короче говоря, невозможно использовать KAE с меню Android.

person rafal    schedule 26.08.2016
comment
это отличное объяснение - person shridutt kothari; 21.12.2019