如何在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!") }
- 为什么我的应用程序只有在使用OpenFileInput / Ouput函数时将字符串直接赋值给代码时才起作用
- 我的TextView看不到
- Android注释与Kotlin和生成工具2.3.0
- 为什么在类路径中有不同版本的Kotlin JAR?
- Kotlin库’rxkotlin-0.21.0.jar’具有不受支持的格式。 请更新库或插件
- 当使用Kotlin :: class.java.canonicalName时OutOfMemoryexception
- 在线程中运行的Kotlin使用的值不同于传递的值
- android.hardware.camera2全部在手机上时,但在模拟器上非常黑暗
- Kotlin – 混淆的属性名称