如何在 android Kotlin 中获取以前的活动
Posted
技术标签:
【中文标题】如何在 android Kotlin 中获取以前的活动【英文标题】:How to get previous activity in android Kotlin 【发布时间】:2019-04-30 04:16:07 【问题描述】:假设我的默认活动是MainActivity
,我开始另一个活动DepositActivity
没有在finish()
中使用finish()
@
现在我如何访问MainActivity
内部DepositActivity
的实例
【问题讨论】:
你能提供一个例子吗,你为什么想要一个 Activity 的实例?我问是因为这听起来不是一个好习惯,因为后台 Activity 可能处于未定义状态(可能已被系统破坏等),这听起来像是泄漏。 查看此链接 --> medium.com/@peterekeneeze/… //创建了一个静态变量伴随对象 @MarošŠeleng 感谢您在这里发出理性的声音。 【参考方案1】:现在我如何访问 DepositActivity 中的 MainActivity 实例
AFAIK这是不可能在另一个活动中访问一个活动的实例
如果您有这种类型的要求,请尝试使用Fragments
进行管理
【讨论】:
【参考方案2】:如果您想从DepositActivity
检索某些结果,请使用startActivityForResult(..., DepositActivity::class.java)
方法。在MainActivity
覆盖onActivityResult
方法:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
// retrieve data using 'data' variable
在DepositActivity
中,你需要在完成DepositActivity
之前使用方法setResult()
设置数据。
如果您想将一些数据传递给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... 所以你可能有内存泄漏
【讨论】:
我很高兴您将“不推荐”加粗,但我认为您根本不应该发布它。此外,你不应该依赖onDestroy()
被调用,导致 There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it...,因此 StaticFieldLeak lint 警告你压制。【参考方案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)
你可以看到日志信息。
希望这会给你提示。
【讨论】:
以上是关于如何在 android Kotlin 中获取以前的活动的主要内容,如果未能解决你的问题,请参考以下文章
如何在 kotlin android 中使用 volley 获取 json
如何在kotlin android的MaterialButton中获取背景颜色
如何在 android 中获取 XML 响应字符串以及 Kotlin 数据模型?
如何在 Android Studio 中使用 Kotlin 从 Firebase 中的数据库中获取特定值?