Android开发:如何将ArrayList中的图片转换为Uri并传递到FullscreenImage Activity
实现方案
你存储的是应用内置的drawable资源ID,不需要访问外部存储生成File对象,直接通过安卓资源规则构造Uri即可,步骤如下:
- 首先确认你的
Photo类提供了资源ID的获取方法,示例结构参考:
public class Photo { private int resId; public Photo(int resId) { this.resId = resId; } public int getResId() { return resId; } }
- 批量转换
ArrayList<Photo>为Uri列表的代码:
List<Uri> imageUriList = new ArrayList<>(); // 遍历原有的Photo列表 for (Photo photo : mList) { // 构造drawable资源的Uri,格式为 android.resource://[包名]/[资源id] Uri imageUri = Uri.parse("android.resource://" + getPackageName() + "/" + photo.getResId()); imageUriList.add(imageUri); }
- 跨Activity传递Uri列表(从MainActivity到FullscreenImageActivity):
// MainActivity中传递数据 Intent intent = new Intent(this, FullscreenImageActivity.class); // Uri实现了Parcelable接口,直接用putParcelableArrayListExtra传递 intent.putParcelableArrayListExtra("image_uris", (ArrayList<? extends Parcelable>) imageUriList); startActivity(intent); // FullscreenImageActivity中接收数据 List<Uri> receiveUris = getIntent().getParcelableArrayListExtra("image_uris"); // 拿到Uri后可直接用Glide、Picasso等加载,或者用ImageView.setImageURI()显示
如果你需要生成文件类型的Uri供外部应用访问,才需要将drawable写入本地存储再通过FileProvider生成Uri,仅应用内部使用上述资源Uri方案性能更高,不需要申请存储权限。
内容的提问来源于stack exchange,提问作者Anushka Roy
相关产品推荐
相关产品推荐

