具体报错就是kotlinx.android.synthetic.main.xxx引入的资源在程序打包运行的时候报Unresolved reference:xxx的错误,因为我把xml放到其他的module里了,而本模块的Activity和他用到的xml并不是一个module,直接用kotlinx去使用这个控件就报错了,目前我的解决办法就是先用findViewById,以后kotlin应该会解决这个问题
问题补充:这个问题在Fragment中比较常见,例如当您访问时btn_K,它需要getView().findViewById(R.id.btn_K),如果在Fragment的
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
var rootView = inflater?.inflate(R.layout.fragment_card_selector, container, false)
btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }
return rootView
}
这个方法里调用btn_K资源肯定找不到,因为这个方法还没有返回rootView,解决方法是:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
btn_K.setOnClickListener { Log.d(TAG, "onViewCreated(): hello world"); }
}
该问题的重点是kotlin这种方式的实现机制是:
当您访问时btn_K,它需要getView().findViewById(R.id.btn_K)
网友评论