kotlin синтетическое целое число нельзя привести к плавающей кнопке - PullRequest
0 голосов
/ 31 августа 2018

Почему

val fabOpen = view.findViewById(R.id.fab_open) as FloatingActionButton

работает правильно и не выдает ошибку, но kotlin синтетический из

val fabOpen = R.id.fab_open as FloatingActionButton

дает мне

java.lang.Integer cannot be cast to android.support.design.widget.FloatingActionButton

ошибка? Они оба показывают, что кастуют как FloatingActionButton. Использование синтетики - это не только меньше кода, это лучшее управление памятью, и я бы предпочел сделать это таким образом. Что-то мне не хватает?

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

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Я разобрался с проблемой.

для доступа к элементу в представлении, используя kotlin синтетический, это выглядит так:

import kotlinx.android.synthetic.main.chatter_main.view.*

class ChatterMain : Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

val view = inflater.inflate(R.layout.chatter_main, container, false)

return view
}

Выше я импортировал kotlin синтетический вид, накачал вид и затем я получил доступ к идентификатору элемента следующим образом:

view.fab_open.visibility = GONE или view.fab_open.SetOnClickListener {}

С Kotlin Synthetic вам не нужно использовать:

val fabOpen = R.id.fab_open as FloatingActionButton поэтому я удалил это утверждение.

0 голосов
/ 31 августа 2018

R.id.fab_open - это сгенерированное целочисленное значение, которое будет установлено в качестве идентификатора вашей кнопки при инфляции, и вы можете посмотреть с помощью findViewById, как вы показали.

Приведение этого к кнопке не будет работать, подумайте (FloatingActionButton) 2688664731 в терминах Java.

Если вы хотите использовать Kotlin Android Extensions и его синтетические свойства, их просто называют самим идентификатором, но они не принадлежат классу R - и вам не нужно назначить их переменным или свойствам. Вы можете просто использовать свою кнопку следующим образом:

fab_open.setOnClickListener { ... }
fab_open.visibility = View.VISIBLE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...