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) {
            }
        }