图片在ImageView中无法加载 - Android

问题描述 投票:0回答:4

我想在下一个活动中以全屏视图加载点击的图片。我不知道我做错了什么。我是android开发的新手,我想我应该通过做一个项目开始学习。我不明白我的编码中的问题是什么。

public class CategoriesAdapter extends RecyclerView.Adapter<CategoriesAdapter.ImageViewHolder> {
   private Context mCtx;
   private List<Category> imageslist;

    public CategoriesAdapter(Context mCtx, List<Category> imageslist) {
        this.mCtx = mCtx;
        this.imageslist = imageslist;
    }


    @NonNull
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(mCtx).inflate(R.layout.recyclerview_images,parent,false);
   return new ImageViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final ImageViewHolder holder, final int position) {
        final Category images=imageslist.get(position);
        Glide.with(mCtx).load(images.url).into(holder.imageView);
        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(mCtx, LoadWall.class);
                intent.putExtra("url", (Parcelable) imageslist.get(position));
                mCtx.startActivity(intent);
            }
        });

    }

    @Override
    public int getItemCount() {
        return imageslist.size();
    }

    class ImageViewHolder extends RecyclerView.ViewHolder{
       ImageView imageView;

        public ImageViewHolder(@NonNull View itemView) {

            super(itemView);
            imageView=itemView.findViewById(R.id.image_view);

        }
    }

}

这是活动,我想加载的图像。但它没有加载。请帮助

public class LoadWall extends AppCompatActivity {
ImageView imageView;
int myImage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_load_wall);
        imageView=findViewById(R.id.load_image);
        get();

    }
    private void get(){
        if(getIntent().hasExtra("url")){
            String image=getIntent().getStringExtra("url");
            set(image);
        }
        else{
            Toast.makeText(this,"No Data",Toast.LENGTH_SHORT).show();
        }
    }
private void set(String image){
    Glide.with(this).load(image).into(imageView);
}
}
java android android-intent imageview
4个回答
2
投票

在这里,你只需要传递URL作为一个字符串。Parcelable是不需要的。

intent.putExtra("url", imageslist.get(position).getUrl());

1
投票

选项1)

在你的下一个活动中,你正在寻找String。

String image=getIntent().getStringExtra("url");

在第一个活动的onClick()中把你的代码改成这样。

Intent intent=new Intent(mCtx, LoadWall.class);
intent.putExtra("url", imageslist.get(position)); 
intent.startActivity(intent);

我看到imageslist.get(position)将返回Category,所以你需要添加你的url参数。就像这样 imageslist.get(position).getUrl()。

选项2)

如果你想获得Category对象,那么在下一个活动中,你可以改成这样

Category category = getIntent().getParcelableExtra("url");

1
投票

您的 imagesList 包含类型为 Category 并从这个列表中发送一个条目到下一个活动。然而,第二个活动期望得到一个 String 来接收。它将检查是否有一个额外的值(它有--但不是你所需要的),然后尝试将该值作为一个 String 这将导致 null 字符串。拥有 null,Glide将不会加载任何东西。

换句话说,你在使用什么数据上犯了一个小错误。当你加载数据时,你要正确地使用 url 领域

final Category images=imageslist.get(position);
Glide.with(mCtx).load(**images.url**).into(holder.imageView);

但当你把它传递给下一个活动时,你会把整个对象送去

intent.putExtra("url", **(Parcelable) imageslist.get(position)**);

使用 url 字段,就像您在第一种情况下所做的那样,将使您的应用程序正常工作。


0
投票

启动您的 Activity

 Intent intent=new Intent(mCtx, LoadWall.class);
 intent.putExtra("url", images.url);
 mCtx.startActivity(intent);
© www.soinside.com 2019 - 2024. All rights reserved.