作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想将 View.OnClickListener
附加到 Button
。我不希望 OnClickListener
成为内联匿名函数定义。相反,我想在 onCreateView()
函数的范围之外定义它。
在 Java 中,我会这样做:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.my_layout, container, false);
View my_btn = view.findViewById(R.id.my_btn);
my_btn.setOnClickListener(handleButtonClick);
return view;
}
View.OnClickListener handleButtonClick = new View.OnClickListener()
{
@Override public void onClick(View v)
{
Log.d("my_tag", "click!")
}
}
其他答案似乎表明以下内容可行,但它不适合我:
override fun onCreateView(name: String?, context: Context?, attrs: AttributeSet?): View
{
var view = super.onCreateView(name, context, attrs)
my_btn.setOnClickListener( handleButtonClick )
return view
}
private val handleButtonClick = View.OnClickListener
{
view->
Log.d("my_tag", "click!")
}
以上有什么问题,我如何将 OnClickListener
定义为我的 Activity
类上的命名属性?
最佳答案
正确缩进解决了这个问题。
private val handleButtonClick = View.OnClickListener { view->
Log.d("my_tag", "click!")
}
正如其他人所提到的,由于 view
参数是单个参数并且被忽略了,因此您可以去掉它。
如果你想使用一个对象:
val handleButtonClick = object : View.OnClickListener {
override fun onClick(view: View) {
Log.d("my_tag", "click!")
}
}
编辑:如@Mango所述, 这是 grammar definition 中规定的限制.
关于android - 如何在 Kotlin 中设置非内联 OnClickListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48245355/
我是一名优秀的程序员,十分优秀!