如何在Kotlin中设置非内联OnClickListener?
我想将一个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
参数是唯一的,而且被忽略,所以可以把它去掉。
编辑 :正如@Mango提到的,这是语法定义中的一个限制。
如果你不想lambda符号,那么这可能适合你:
val onClickListener = object : View.OnClickListener { override fun onClick(view: View) { //ToDo: Implement whatever method you need } }
由于您没有使用view
,因此不需要命名它:
val clickListener = View.OnClickListener { Log.d("my_tag", "click!") }