假设我的默认活动是MainActivity
,而我在DepositActivity
中使用finish()
进行了另一项活动MainActivity
而没有
现在如何在MainActivity
内访问DepositActivity
的实例
答案 0 :(得分:3)
答案 1 :(得分:0)
您需要在MainActivity中声明为伴侣对象变量和方法。变量和方法的静态类型在Kotlin中声明为伴侣对象。
看下面的例子,
在MainActivity中声明变量和方法,
val value : String = "hello from Main"
companion object {
lateinit var instance : MainActivity
fun getInstancem() : MainActivity {
return instance
}
}
使用该实例并在 DepositActivity 中打印值,
Log.d("log_in_second_activity", "message " + MainActivity.getInstancem().value)
您可以看到日志消息。
希望这会给您提示。
答案 2 :(得分:0)
如果要从DepositActivity
中检索某些结果,请使用startActivityForResult(..., DepositActivity::class.java)
方法。在MainActivity
中覆盖onActivityResult
方法:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
// retrieve data using 'data' variable
}
在DepositActivity
中,您需要在完成setResult()
之前使用方法DepositActivity
设置数据。
如果要将某些数据传递给DepositActivity
,请使用intent
,例如:
val intent = Intent(this, DepositActivity::class.java)
intent.putExtra("Extra_Name", /*Some Data*/)
startActivity(intent)
不推荐:对MainActivity
使用静态引用(不要忘记在onDestroy()
方法中将其删除):
class MainActivity : AppCompatActivity() {
companion object {
@SuppressLint("StaticFieldLeak")
@JvmStatic
var instance: MainActivity? = null
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
instance = this
}
override fun onDestroy() {
instance = null
super.onDestroy()
}
}
在DepositActivity
中,您可以像这样访问它:
MainActivity.instance?./* call some method or property */
但是您不应该依赖于onDestroy()
的调用,因为there are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it...会导致内存泄漏