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

Android Kotlin中如何使用Photo Picker重新打开已选中的图片?

如何重新打开Photo Picker并保留已选中的图片

Android系统的Photo Picker在不同版本的支持能力不同,以下分两种场景给出解决方案:

一、Android 14(API 34)及以上版本

从Android 14开始,Photo Picker支持预选中已选择的图片,你可以通过PickVisualMediaRequest.Builder的setSelectedUris()方法,在启动Picker时传入之前保存的已选URI列表,这样打开Picker时这些图片会被自动选中。

修改你启动Picker的代码:

// 基于已保存的urisList构建请求
val pickRequest = PickVisualMediaRequest.Builder()
    .setMediaType(PickVisualMedia.ImageOnly)
    .setSelectedUris(urisList) // 传入已选中的图片URI列表
    .build()

pickMultipleMedia.launch(pickRequest)

注意:传入的URI必须是之前通过Photo Picker获取的有效URI,这类URI的访问权限是持久化的,只要应用未卸载就一直有效。

二、Android 13及以下版本

旧版本的Photo Picker没有预选功能,你需要自行实现“已选图片管理+重新选择”的逻辑:

  1. 在界面上展示已选中的图片列表,允许用户查看、移除已选内容;
  2. 当用户再次点击选择按钮时,正常启动Photo Picker,在回调中合并或替换原有URI列表:

调整你的回调代码(以合并新选图片为例):

pickMultipleMedia = registerForActivityResult(
    ActivityResultContracts.PickMultipleVisualMedia(30)
) { newSelectedUris ->
    if (newSelectedUris.isNotEmpty()) {
        // 合并新选图片到原有列表,若要替换则先clear再addAll
        urisList.addAll(newSelectedUris)
        multipleImages.notifyDataSetChanged()
        findImageSize(urisList)
        binding.root.visibility = View.VISIBLE
    }
    // 用户取消选择时,保留原有已选列表即可
}

额外说明:直接打开已选中的图片查看

如果你只是想查看已选中的图片,无需重新打开Photo Picker,直接用获取到的URI加载即可,比如用图片加载库Glide:

// 示例:加载urisList中指定位置的图片
Glide.with(this)
    .load(urisList[imagePosition])
    .into(targetImageView)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:47:16