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
相关产品推荐
相关产品推荐

