科特林合成整数无法转换为浮动按钮

kotlin synthetic Integer cannot be cast to floating 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 如果这会有所作为。

R.id.fab_open 是一个生成的整数值,将被设置为您在 inflation 处的按钮的 ID,并且您可以像显示的那样使用 findViewById 进行查找。

将它投射到按钮上是行不通的,用 Java 的方式思考 (FloatingActionButton) 2688664731

如果您希望使用 Kotlin Android Extensions 及其合成属性,这些只是简单地命名为 ID 本身,但它们并非来自 R class - 而您不需要将它们分配给变量或属性。您可以像这样简单地使用按钮:

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

我找到问题了。

使用 kotlin synthetic 访问视图中的元素,如下所示:

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
}

上面我导入了view的kotlin synthetic,膨胀了view,然后 然后我像这样访问了元素的 ID:

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

使用 Kotlin Synthetic,您不需要使用:

val fabOpen = R.id.fab_open as FloatingActionButton 所以我删除了那句话。