如何在Kotlin的自定义函数中启动另一个Activity?
问题原因及解决方法
你的自定义函数switchActivity是顶层函数(不属于任何类),这里的this不是安卓要求的Context对象,而且startActivity是Context类的方法,顶层函数里直接调用会找不到这个方法,所以代码无法运行。启动Activity必须依赖Context(比如Activity、Application都是Context的子类),下面给你两种可行的解决方式:
方式一:把函数改成MainActivity的成员函数
将switchActivity放到MainActivity类内部,此时函数里的this就是MainActivity的实例(属于Context),可以直接调用startActivity:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { // 直接调用成员函数 switchActivity() } } // 改为MainActivity的成员函数 fun switchActivity(){ val navigate = Intent(this, Activity2::class.java) startActivity(navigate) } }
方式二:给顶层函数传入Context参数
如果想保留顶层函数的形式,需要给它传一个Context参数,用这个Context来创建Intent并启动Activity:
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { // 传入当前Activity作为Context switchActivity(this) } } } // 顶层函数接收Context参数 fun switchActivity(context: Context){ val navigate = Intent(context, Activity2::class.java) // 注意:如果传入的是非Activity类型的Context(比如Application),需要添加NEW_TASK标记 if (context !is Activity) { navigate.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } context.startActivity(navigate) }
内容的提问来源于stack exchange,提问作者Carye James Adelante
相关产品推荐
相关产品推荐

