Kotlin 在运行时列出所有活动
Kotlin list all activities at runtime
我正在尝试做一个简单的调试 activity,它允许我在运行时启动我的项目的任何 activity。
截至目前,我已经实现了一个 RecyclerView,它以这种方式从列表中获取数据:
val activitiesList = ArrayList<Activity>()
activitiesList.add(FrameHomeActivity())
activitiesList.add(LeaderHomeActivity())
activitiesList.add(LoginActivity())
...
但这依赖于我在添加新 activity 时必须手动更新此列表。
我已经设法将 clickListener 附加到 RecyclerView,这样每个 activity 都可以在触摸项目时成功启动。
有没有办法“动态”获取项目中的所有活动,这样我就不必在每次添加新 activity 时都更新此代码?
您可以使用此代码获取所有活动的列表
getActivity()
.getPackageManager()
.getPackageInfo(getActivity().getPackageName(), PackageManager.GET_ACTIVITIES)
.activities
编辑 - 当从 activity 调用时,getActivity() 可以用此替换,否则当从片段调用时,将需要 getActivity()。
您不调用 Activity 的构造函数,而是触发 Intent
。您从 PackageManager
获得 Activity
然后按名称启动它。
val activities = packageManager
.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES).activities
val nameList= activities.map { it.name }
nameList
这里是 List<String>
它将包含您的 Activity 类 的完全限定名称。
您可以使用此名称创建一个 Intent
以从适配器启动 activity。
fun onClickItem(context:Context, activityName:String){
try {
val c = Class.forName(activityName)
val intent = Intent(context, c)
context.startActivity(intent)
} catch (ex: Exception) {
}
}
我正在尝试做一个简单的调试 activity,它允许我在运行时启动我的项目的任何 activity。
截至目前,我已经实现了一个 RecyclerView,它以这种方式从列表中获取数据:
val activitiesList = ArrayList<Activity>()
activitiesList.add(FrameHomeActivity())
activitiesList.add(LeaderHomeActivity())
activitiesList.add(LoginActivity())
...
但这依赖于我在添加新 activity 时必须手动更新此列表。
我已经设法将 clickListener 附加到 RecyclerView,这样每个 activity 都可以在触摸项目时成功启动。
有没有办法“动态”获取项目中的所有活动,这样我就不必在每次添加新 activity 时都更新此代码?
您可以使用此代码获取所有活动的列表
getActivity()
.getPackageManager()
.getPackageInfo(getActivity().getPackageName(), PackageManager.GET_ACTIVITIES)
.activities
编辑 - 当从 activity 调用时,getActivity() 可以用此替换,否则当从片段调用时,将需要 getActivity()。
您不调用 Activity 的构造函数,而是触发 Intent
。您从 PackageManager
获得 Activity
然后按名称启动它。
val activities = packageManager
.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES).activities
val nameList= activities.map { it.name }
nameList
这里是 List<String>
它将包含您的 Activity 类 的完全限定名称。
您可以使用此名称创建一个 Intent
以从适配器启动 activity。
fun onClickItem(context:Context, activityName:String){
try {
val c = Class.forName(activityName)
val intent = Intent(context, c)
context.startActivity(intent)
} catch (ex: Exception) {
}
}