Kotlin合成整数不能转换为浮动按钮

时间:2018-08-30 21:58:26

标签: casting kotlin floating-action-button

为什么

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 :(得分:1)

R.id.fab_open是一个生成的整数值,将其设置为充气时按钮的ID,您可以像显示的那样使用findViewById进行查找。

将其投射到按钮上不起作用,以Java术语(FloatingActionButton) 2688664731来考虑。

如果您想使用Kotlin Android Extensions及其综合属性,则将它们简单地命名为ID本身,但它们并非来自R类-您不需要分配他们到变量或属性。您可以像这样简单地使用按钮:

fab_open.setOnClickListener { ... }
fab_open.visibility = View.VISIBLE

答案 1 :(得分:1)

我发现了问题。

使用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合成,放大了视图,然后 然后我像这样访问元素的ID:

view.fab_open.visibility = GONEview.fab_open.SetOnClickListener {}

使用Kotlin Synthetic,您无需使用:

val fabOpen = R.id.fab_open as FloatingActionButton,所以我删除了该语句。