有什么方法可以直接在 Kotlin 的构造函数中将 Context 转换为 Activity 吗?
Is there any way to cast a Context to an Activity directly inside the constructor with Kotlin?
有没有办法直接在构造函数中将 Context 转换为 Activity?
类似的东西:
class CustomView(mainActivity: MainActivity, attrs: AttributeSet?) : SurfaceView(mainActivity, attrs) {
fun draw() {
mainActivity.foo()
...
}
}
为了避免在每个方法中强制转换它:
class CustomView(context: Context, attrs: AttributeSet?) : SurfaceView(context, attrs) {
fun draw() {
val mainActivity = context as MainActivity
mainAcitivity.foo()
...
}
}
你可以这样做:
class CustomView(private val activity: MainActivity) {
constructor(context: Context) : this(context as MainActivity)
}
请注意,存储 activity 而不是上下文对象本身通常不是一个好主意,因为那样的话您会将 CustomView Class 与 activity 紧密耦合,这可以造成各种问题。
请考虑更改设计,使这些 类 不紧密耦合。
我想你可以这样做而不是这样做,这将是对每个方法的转换的改进
class CustomView(context: Context, attrs: AttributeSet?) : SurfaceView(context, attrs) {
private val mainActivity = context as MainActivity
fun draw() {
mainActivity.foo()
}
}
或者为了更安全地使用这样的安全转换
class CustomView(context: Context, attrs: AttributeSet?) : SurfaceView(context, attrs) {
private val mainActivity = context as? MainActivity
fun draw() {
mainActivity?.foo()
}
}
有没有办法直接在构造函数中将 Context 转换为 Activity?
类似的东西:
class CustomView(mainActivity: MainActivity, attrs: AttributeSet?) : SurfaceView(mainActivity, attrs) {
fun draw() {
mainActivity.foo()
...
}
}
为了避免在每个方法中强制转换它:
class CustomView(context: Context, attrs: AttributeSet?) : SurfaceView(context, attrs) {
fun draw() {
val mainActivity = context as MainActivity
mainAcitivity.foo()
...
}
}
你可以这样做:
class CustomView(private val activity: MainActivity) {
constructor(context: Context) : this(context as MainActivity)
}
请注意,存储 activity 而不是上下文对象本身通常不是一个好主意,因为那样的话您会将 CustomView Class 与 activity 紧密耦合,这可以造成各种问题。
请考虑更改设计,使这些 类 不紧密耦合。
我想你可以这样做而不是这样做,这将是对每个方法的转换的改进
class CustomView(context: Context, attrs: AttributeSet?) : SurfaceView(context, attrs) {
private val mainActivity = context as MainActivity
fun draw() {
mainActivity.foo()
}
}
或者为了更安全地使用这样的安全转换
class CustomView(context: Context, attrs: AttributeSet?) : SurfaceView(context, attrs) {
private val mainActivity = context as? MainActivity
fun draw() {
mainActivity?.foo()
}
}