【问题标题】:How to get previous activity in android Kotlin如何在 android Kotlin 中获取以前的活动
【发布时间】:2019-04-30 04:16:07
【问题描述】:

假设我的默认活动是MainActivity,我开始另一个活动DepositActivity 没有finish() 中使用finish()@

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

【问题讨论】:

  • 你能提供一个例子吗,你为什么想要一个 Activity 的实例?我问是因为这听起来不是一个好习惯,因为后台 Activity 可能处于未定义状态(可能已被系统破坏等),这听起来像是泄漏。
  • 查看此链接 --> medium.com/@peterekeneeze/… //创建了一个静态变量伴随对象 { }
  • @MarošŠeleng 感谢您在这里发出理性的声音。

标签: android kotlin android-activity


【解决方案1】:

现在我如何访问 DepositActivity 中的 MainActivity 实例

AFAIK这是不可能在另一个活动中访问一个活动的实例

如果您有这种类型的要求,请尝试使用Fragments 进行管理

【讨论】:

    【解决方案2】:
    1. 如果您想从DepositActivity 检索某些结果,请使用startActivityForResult(..., DepositActivity::class.java) 方法。在MainActivity 覆盖onActivityResult 方法:

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

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

    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... 所以你可能有内存泄漏

    【讨论】:

    【解决方案3】:

    您需要在 MainActivity 中声明为 companion object 变量和方法。静态类型的变量和方法在 Kotlin 中被声明为 companion object

    看下面的例子,

    在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)
    

    你可以看到日志信息。

    希望这会给你提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多