如何在Android Kotlin中获得以前的活动

时间:2018-11-28 09:38:24

标签: android kotlin

假设我的默认活动是MainActivity,而我在DepositActivity中使用finish()进行了另一项活动MainActivity 而没有

现在如何在MainActivity内访问DepositActivity的实例

3 个答案:

答案 0 :(得分:3)

  

现在,如何在DepositActivity内部访问MainActivity的实例

AFAIK 无法访问另一个“活动”中一个活动的实例

如果您有这种要求,请尝试使用Fragments

答案 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)

  1. 如果要从DepositActivity中检索某些结果,请使用startActivityForResult(..., DepositActivity::class.java)方法。在MainActivity中覆盖onActivityResult方法:

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        // retrieve data using 'data' variable
    }
    

    DepositActivity中,您需要在完成setResult()之前使用方法DepositActivity设置数据。

  2. 如果要将某些数据传递给DepositActivity,请使用intent,例如:

    val intent = Intent(this, DepositActivity::class.java)
    intent.putExtra("Extra_Name", /*Some Data*/)
    startActivity(intent)
    
  3. 不推荐:对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...会导致内存泄漏