我想在下一个活动中以全屏视图加载点击的图片。我不知道我做错了什么。我是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);
}
}
在这里,你只需要传递URL作为一个字符串。Parcelable是不需要的。
intent.putExtra("url", imageslist.get(position).getUrl());
选项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");
您的 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
字段,就像您在第一种情况下所做的那样,将使您的应用程序正常工作。
启动您的 Activity
Intent intent=new Intent(mCtx, LoadWall.class);
intent.putExtra("url", images.url);
mCtx.startActivity(intent);