You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简化ActivityResultLauncher的声明、传参与调用?

简化多个ActivityResultLauncher的声明与传参方案

方案一:自定义封装类(类型安全,推荐)

通过自定义类统一管理所有ActivityResultLauncher,既保证类型安全,又能简化传参和调用流程。

Java 示例

  1. 定义封装类:
public class LauncherContainer {
    private final ActivityResultLauncher<Intent> rangtGallery;
    private final ActivityResultLauncher<Intent> rangtCamera;
    private final ActivityResultLauncher<Intent> stockGallery;
    private final ActivityResultLauncher<Intent> stockCamera;

    public LauncherContainer(
            ActivityResultLauncher<Intent> rangtGallery,
            ActivityResultLauncher<Intent> rangtCamera,
            ActivityResultLauncher<Intent> stockGallery,
            ActivityResultLauncher<Intent> stockCamera) {
        this.rangtGallery = rangtGallery;
        this.rangtCamera = rangtCamera;
        this.stockGallery = stockGallery;
        this.stockCamera = stockCamera;
    }

    // 提供Getter方法
    public ActivityResultLauncher<Intent> getRangtGallery() { return rangtGallery; }
    public ActivityResultLauncher<Intent> getRangtCamera() { return rangtCamera; }
    public ActivityResultLauncher<Intent> getStockGallery() { return stockGallery; }
    public ActivityResultLauncher<Intent> getStockCamera() { return stockCamera; }
}
  1. 在Activity中使用:
// 声明各个Launcher
private ActivityResultLauncher<Intent> rangtGalleryActivityResultLauncher;
private ActivityResultLauncher<Intent> rangtCameraActivityResultLauncher;
private ActivityResultLauncher<Intent> stockGalleryActivityResultLauncher;
private ActivityResultLauncher<Intent> stockCameraActivityResultLauncher;

// 初始化封装类并传入myClass
LauncherContainer launcherContainer = new LauncherContainer(
        rangtGalleryActivityResultLauncher,
        rangtCameraActivityResultLauncher,
        stockGalleryActivityResultLauncher,
        stockCameraActivityResultLauncher);
myparam = new myClass(launcherContainer);
  1. 在myClass中调用:
public class myClass {
    private final LauncherContainer launcherContainer;

    public myClass(LauncherContainer launcherContainer) {
        this.launcherContainer = launcherContainer;
    }

    // 调用示例
    public void launchRangtGallery() {
        launcherContainer.getRangtGallery().launch(new Intent(...));
    }
}

方案二:枚举+Map(灵活易扩展)

用枚举定义Launcher类型,结合Map存储,避免字符串硬编码的拼写错误。

Java 示例

  1. 定义枚举:
public enum LauncherType {
    RANGT_GALLERY,
    RANGT_CAMERA,
    STOCK_GALLERY,
    STOCK_CAMERA
}
  1. 在Activity中初始化Map:
private Map<LauncherType, ActivityResultLauncher<Intent>> launcherMap = new EnumMap<>(LauncherType.class);

// 初始化Launcher后存入Map
launcherMap.put(LauncherType.RANGT_GALLERY, rangtGalleryActivityResultLauncher);
launcherMap.put(LauncherType.RANGT_CAMERA, rangtCameraActivityResultLauncher);
launcherMap.put(LauncherType.STOCK_GALLERY, stockGalleryActivityResultLauncher);
launcherMap.put(LauncherType.STOCK_CAMERA, stockCameraActivityResultLauncher);

// 传入myClass
myparam = new myClass(launcherMap);
  1. 在myClass中调用:
public class myClass {
    private final Map<LauncherType, ActivityResultLauncher<Intent>> launcherMap;

    public myClass(Map<LauncherType, ActivityResultLauncher<Intent>> launcherMap) {
        this.launcherMap = launcherMap;
    }

    // 调用示例
    public void launchRangtGallery() {
        launcherMap.get(LauncherType.RANGT_GALLERY).launch(new Intent(...));
    }
}

方案三:Kotlin 数据类(极简实现)

如果使用Kotlin开发,数据类可以大幅简化封装代码:

data class LauncherContainer(
    val rangtGallery: ActivityResultLauncher<Intent>,
    val rangtCamera: ActivityResultLauncher<Intent>,
    val stockGallery: ActivityResultLauncher<Intent>,
    val stockCamera: ActivityResultLauncher<Intent>
)

在Activity中使用:

val launcherContainer = LauncherContainer(
    rangtGalleryActivityResultLauncher,
    rangtCameraActivityResultLauncher,
    stockGalleryActivityResultLauncher,
    stockCameraActivityResultLauncher
)
myparam = myClass(launcherContainer)

调用时直接通过属性访问:

launcherContainer.rangtGallery.launch(Intent(...))

内容的提问来源于stack exchange,提问作者Chris972

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:36:22