Как установить не-встроенный 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 , это ограничение указано в определении грамматики .

Если вам не нужны нотные обозначения лямбда, это может сработать для вас:

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