从Java到Kotlin OnClickListener的翻译
我在翻译这段代码的方法上遇到了麻烦。 因此,我有一些JAVA代码,如下所示: 为按钮设置的OnClickListener:从Java到Kotlin OnClickListener的翻译,java,android,onclick,kotlin,onclicklistener,Java,Android,Onclick,Kotlin,Onclicklistener,我在翻译这段代码的方法上遇到了麻烦。 因此,我有一些JAVA代码,如下所示: 为按钮设置的OnClickListener: Button.OnClickListener mTakePicSOnClickListener = new Button.OnClickListener() { @Override public void onClick(View v) { dispatchTakePictureIntent(ACTION_TAKE_PHOTO_S)
Button.OnClickListener mTakePicSOnClickListener =
new Button.OnClickListener() {
@Override
public void onClick(View v) {
dispatchTakePictureIntent(ACTION_TAKE_PHOTO_S);
}
};
然后我有了按钮本身,还有一个将OnClickListener应用于该按钮的函数:
Button picSBtn = (Button) findViewById(R.id.btnIntendS);
setBtnListenerOrDisable(
picSBtn,
mTakePicSOnClickListener,
MediaStore.ACTION_IMAGE_CAPTURE
);
那么我有这个功能:
private void setBtnListenerOrDisable(
Button btn,
Button.OnClickListener onClickListener,
String intentName
) {
if (isIntentAvailable(this, intentName)) {
btn.setOnClickListener(onClickListener);
} else {
btn.setText(
getText(R.string.cannot).toString() + " " + btn.getText());
btn.setClickable(false);
}
}
private fun setBtnListenerOrDisable(
btn: Button,
onClickListener: View.OnClickListener,
intentName: String
) {
if (isIntentAvailable(this, intentName)) {
btn.setOnClickListener(onClickListener)
} else {
btn.text = getText(R.string.cannot).toString() + " " + btn.text
btn.isClickable = false
}
}
所以我要求Android Studio将代码翻译成kotlin
它只需要做一些小的更改,但在本例中它不起作用。似乎在这方面的方法有很大的不同
因此,在Kotlin中,代码的相同部分如下所示:
internal var mTakePicSOnClickListener: Button.OnClickListener = object : Button.OnClickListener {
override fun onClick(v: View) {
dispatchTakePictureIntent(ACTION_TAKE_PHOTO_S)
}
}
在修改了一点代码之后,我有:
val picSBtn = btnIntendS as Button
setBtnListenerOrDisable(
picSBtn,
mTakePicSOnClickListener,
MediaStore.ACTION_IMAGE_CAPTURE
)
然后函数:
private void setBtnListenerOrDisable(
Button btn,
Button.OnClickListener onClickListener,
String intentName
) {
if (isIntentAvailable(this, intentName)) {
btn.setOnClickListener(onClickListener);
} else {
btn.setText(
getText(R.string.cannot).toString() + " " + btn.getText());
btn.setClickable(false);
}
}
private fun setBtnListenerOrDisable(
btn: Button,
onClickListener: View.OnClickListener,
intentName: String
) {
if (isIntentAvailable(this, intentName)) {
btn.setOnClickListener(onClickListener)
} else {
btn.text = getText(R.string.cannot).toString() + " " + btn.text
btn.isClickable = false
}
}
AndroidStudio所指向的错误是在创建“通用”OnClickListener时发生的:
internal var mTakePicSOnClickListener: Button.OnClickListener
我不知道如何在科特林创作这个,翻译给了我
有人知道a是应该翻译这个,还是采取另一种方法吗
非常感谢 当我在android studio中查看时,似乎没有界面按钮。OnClickListener,只要将其更改为View.OnClickListener,您就可以开始了 Kotlin的风格是使用lambda。例如:
btn.setOnClickListener { v -> doSomething() }
要将其作为参数传递,只需将其存储为
val-listener={v:View->doSomething()}
或
val侦听器:((视图)->Unit)={v->doSomething()}
要将其传递给函数,参数应如下所示:
fun foo(listener:((View) -> Unit)){
btn.setOnClickListener(listener)
}
val l={ v:View -> Log.d("View", "click")}
foo(l)