为什么
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
的情况,
答案 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 = GONE
或view.fab_open.SetOnClickListener {}
使用Kotlin Synthetic,您无需使用:
val fabOpen = R.id.fab_open as FloatingActionButton
,所以我删除了该语句。