从 class 调用 activity 函数
Calling activity function from class
我在 android studio 中使用 Kotlin 制作应用程序。
在我的主 activity 中,我有一个函数 changeText() 可以更改文本框的文本。
我有一个正在实现的 class,称为 VerificationListener(),创建后会执行一些操作,然后调用 onVerified(),但是我无法从 onVerified 调用 changeText,有没有办法做到这一点?我正在处理的示例在 Java 中并且执行了。
我正在处理的例子
public void onVerified() {
mIsVerified = true;
Log.d(TAG, "Verified!");
hideProgressAndShowMessage(R.string.verified);
showCompleted();}
上面在class里面,下面刚好在activity
里面
private void showCompleted() {
ImageView checkMark = (ImageView) findViewById(R.id.checkmarkImage);
checkMark.setVisibility(View.VISIBLE);
}
无论是否使用 Kotlin,您都无法从后台线程访问 UI。您必须 运行 在 UI 线程上这样做:
runOnUiThread {
val checkMark: ImageView = findViewById(R.id.checkmarkImage)
checkMark.visibility = View.VISIBLE
}
如果 "I cannot call changeText from onVerified" 你的意思是你有一个独立的 VerificationListener class 并且从那个 class 你不能调用 Activity 上的方法,你应该a) 使 VerificationListener 成为 Activity 的内部 class,b) 在创建时将 activity 传递给 VerificationListener(注意生命周期) c) 实施一些消息传递解决方案( broadcast receiver, startActivity + onIntent(), observable, or even an event bus (not advisable). 这是 b:
的示例实现
class MyActivity : Activity(), VerificationListener.OnVerifiedCallback {
fun onVerified() {
changeText()
}
override fun onCreate(state: Bundle) {
super.onCreate(state)
VerificationListener(this).doStuff()
}
}
class VerificationListener(internal var callback: OnVerifiedCallback) {
interface OnVerifiedCallback {
fun onVerified()
}
fun whenSomethingGetsVerified() {
doThings()
callback.onVerified()
}
}
编辑:忘记您正在使用 Kotlin,更改为 Kotlin 实现
我在 android studio 中使用 Kotlin 制作应用程序。
在我的主 activity 中,我有一个函数 changeText() 可以更改文本框的文本。 我有一个正在实现的 class,称为 VerificationListener(),创建后会执行一些操作,然后调用 onVerified(),但是我无法从 onVerified 调用 changeText,有没有办法做到这一点?我正在处理的示例在 Java 中并且执行了。
我正在处理的例子
public void onVerified() {
mIsVerified = true;
Log.d(TAG, "Verified!");
hideProgressAndShowMessage(R.string.verified);
showCompleted();}
上面在class里面,下面刚好在activity
里面private void showCompleted() {
ImageView checkMark = (ImageView) findViewById(R.id.checkmarkImage);
checkMark.setVisibility(View.VISIBLE);
}
无论是否使用 Kotlin,您都无法从后台线程访问 UI。您必须 运行 在 UI 线程上这样做:
runOnUiThread {
val checkMark: ImageView = findViewById(R.id.checkmarkImage)
checkMark.visibility = View.VISIBLE
}
如果 "I cannot call changeText from onVerified" 你的意思是你有一个独立的 VerificationListener class 并且从那个 class 你不能调用 Activity 上的方法,你应该a) 使 VerificationListener 成为 Activity 的内部 class,b) 在创建时将 activity 传递给 VerificationListener(注意生命周期) c) 实施一些消息传递解决方案( broadcast receiver, startActivity + onIntent(), observable, or even an event bus (not advisable). 这是 b:
的示例实现class MyActivity : Activity(), VerificationListener.OnVerifiedCallback {
fun onVerified() {
changeText()
}
override fun onCreate(state: Bundle) {
super.onCreate(state)
VerificationListener(this).doStuff()
}
}
class VerificationListener(internal var callback: OnVerifiedCallback) {
interface OnVerifiedCallback {
fun onVerified()
}
fun whenSomethingGetsVerified() {
doThings()
callback.onVerified()
}
}
编辑:忘记您正在使用 Kotlin,更改为 Kotlin 实现