将字符串传递给我的活动后,尝试在片段中获取它会导致空字符串

Posted

技术标签:

【中文标题】将字符串传递给我的活动后,尝试在片段中获取它会导致空字符串【英文标题】:After passing a string to my Activity, trying to get it in a fragment results in an empty string 【发布时间】:2020-10-19 12:26:50 【问题描述】:

我通过这样的意图传递一个字符串:

val intent = Intent(this, RegistrationActivity::class.java)
        intent.putExtra("mobile", user.mobile)
        startActivity(intent)

然后我在我的 RegistrationActivity 中成功接收到这个。

private var mobile : String? = ""
override fun onCreate(savedInstanceState: Bundle?) 
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_registration_layout)

    val intent = this.intent
    val extras = intent.extras
    mobile = extras?.getString("mobile")
    

fun getMobile(): String 
    return mobile!!

但是当我在 RegistrationActivity 中的片段中调用 getMobile() 时,我得到的只是一个空字符串:

val activity = RegistrationActivity()
val mobile = activity.getMobile()

【问题讨论】:

如何从 RegistrationActivity 调用片段? 我使用的是 NavHostFragment RegistrationActivity() 为什么要手动实例化一个新的 Activity 实例?你永远不应该那样做。 【参考方案1】:

不要像那样创建activity 的实例,使用startActivity() 导航到activity,它会创建它的一个实例。检查Activity lifecycle

由于您以错误的方式创建了activity 的实例,onCreate() 将不会调用,mobile 将是初始值。

这是一个如何从fragment 访问activity 的示例:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) 
    super.onViewCreated(view, savedInstanceState)

    val mobile = (activity as? RegistrationActivity)?.getMobile()

【讨论】:

以上是关于将字符串传递给我的活动后,尝试在片段中获取它会导致空字符串的主要内容,如果未能解决你的问题,请参考以下文章

从另一个活动的活动中的片段传递数据

将数据从片段列表视图项传递到活动字符串变量 onitemclicklistener

完全下载文件时,将下载的文件从一个片段传递到另一个片段

将接口从片段传递到kotlin中的活动

在另一个活动托管的片段之间传递数据的最佳实践

从活动接收意图后如何创建片段?