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

Android新手求助:FishBun选图后RecyclerView无法显示图片

解决FishBun选图后RecyclerView不显示图片的问题

嘿,我帮你找出问题啦!你的代码里有几个关键小问题导致选完图后图片没在RecyclerView里显示,咱们一步步改过来:

1. 数据类型不匹配,FishBun返回的是Uri列表而非Modell列表

你在MainActivity的onActivityResult里直接把FishBun返回的ArrayList<Uri>赋值给了List<Modell>,这会导致类型转换错误——实际上你的uris列表根本没拿到正确的数据。

修改MainActivity的onActivityResult方法:

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case FishBun.FISHBUN_REQUEST_CODE:
            if (resultCode == RESULT_OK) {
                // 先获取FishBun返回的Uri列表
                ArrayList<Uri> uriList = data.getParcelableArrayListExtra(FishBun.INTENT_PATH);
                // 将每个Uri转换成你的Modell对象,存入列表
                uris.clear();
                for (Uri uri : uriList) {
                    uris.add(new Modell(uri));
                }
                // 更新Adapter数据
                adapter.setUris(uris);
                break;
            }
    }
}

2. Adapter更新数据后未通知RecyclerView刷新

你的Adapter的setUris方法只是替换了内部的列表,但没有调用notifyDataSetChanged()——RecyclerView不知道数据已经更新,自然不会刷新视图。

修改Adapter的setUris方法:

public void setUris(List<Modell> uris) {
    this.uris = uris;
    notifyDataSetChanged(); // 加上这行,通知RecyclerView刷新UI
}

3. 可选优化:用Glide更稳定地加载图片

你在Adapter里直接用setImageURI加载Uri,有时候会出现加载失败的情况,建议用Glide来加载(你已经在FishBun里用了GlideAdapter,说明你已经配置了Glide依赖):

修改Adapter的onBindViewHolder方法:

@Override
public void onBindViewHolder(@NonNull VH holder, int position) {
    Modell modell = uris.get(position);
    // 用Glide加载图片,比原生setImageURI更可靠
    Glide.with(holder.img.getContext())
         .load(modell.getImg())
         .into(holder.img);
}

记得导入Glide的包:import com.bumptech.glide.Glide;

4. 可选优化:初始化Adapter时传入初始列表

为了避免空指针或者初始状态的潜在问题,你可以在初始化Adapter时就把初始列表传进去:

在MainActivity里修改Adapter初始化:

List<Modell> uris = new ArrayList<>();
Adapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 传入初始列表初始化Adapter
    adapter = new Adapter(uris);
    RecyclerView rv = findViewById(R.id.rv);
    rv.setAdapter(adapter);
    rv.setLayoutManager(new LinearLayoutManager(this,RecyclerView.HORIZONTAL,false));
    // ... 其他代码不变
}

然后在Adapter里添加构造方法:

public Adapter(List<Modell> uris) {
    this.uris = uris;
}

做完这些修改后,重新运行App,选完图点击确定,RecyclerView应该就能正常显示图片啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:07:56