如何在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!") }