Android Kotlin 如何向SDK库内的Activity传递参数?
Android SDK内Activity参数传递正确实现方案
错误原因
你手动实例化ShowEmailActivity的方式无效:Android的Activity生命周期由系统统一托管,你自己创建的Activity实例和系统实际启动运行的实例是完全独立的两个对象,所以手动设置的参数不会生效。
正确实现步骤
第一步:修改SDK内ShowEmailActivity逻辑
通过Intent的Extra存储传递参数,在Activity生命周期回调中读取参数赋值,推荐对外提供统一的Intent构造方法,避免调用方手动拼写Key出错:
class ShowEmailActivity : AppCompatActivity() { companion object { // 内部定义Extra存储Key,避免外部拼写错误 private const val EXTRA_EMAIL = "extra_email" // 对外公开构造启动Intent的方法,调用方无需感知内部Key fun newIntent(context: Context, email: String): Intent { return Intent(context, ShowEmailActivity::class.java).apply { putExtra(EXTRA_EMAIL, email) } } } private var email: String = "" private lateinit var emailTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_show_email) // 初始化布局TextView emailTextView = findViewById(R.id.your_email_textview_id) // 读取Intent传递的参数 email = intent.getStringExtra(EXTRA_EMAIL) ?: "" // 可保留原有setEmail逻辑,兼容已有代码 setEmail(email) // 赋值到布局展示 emailTextView.text = email } // 原有方法可保留 fun setEmail(email:String){ this.email = email } }
第二步:主应用侧调用方式
直接调用SDK提供的newIntent方法构造跳转意图,启动Activity即可:
// MainActivity中跳转逻辑 val targetIntent = ShowEmailActivity.newIntent(this@MainActivity, myEmail) startActivity(targetIntent)
注意事项
如果SDK开启了代码混淆,需要在混淆规则中保留ShowEmailActivity的类名,避免系统反射创建Activity失败。
内容的提问来源于stack exchange,提问作者Nion
相关产品推荐
相关产品推荐

