如何在android对话框中显示图像(动态)



我正在android中创建图库,在那里我可以使用recyclerview放置图像,这很好。现在我的要求是,当我点击特定的图像时,它应该在对话框中打开。目前,我已经硬编码的图像可绘制,但它将来自API作为一个网址。这就是我正在做的:这是java代码

@Override
public void onBindViewHolder(final GalleryAdapter.ViewHolder viewHolder, int i) {
//viewHolder.title.setText(galleryList.get(i).getImageTitle());
viewHolder.img.setScaleType(ImageView.ScaleType.CENTER_CROP);
viewHolder.img.setImageResource((galleryList.get(i).getImageId()));
//Picasso.with(context).load(galleryList.get(i).getImageId()).resize(240, 120).into(viewHolder.img);
viewHolder.img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog nagDialog = new Dialog(context);
nagDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
nagDialog.setCancelable(false);
nagDialog.setContentView(R.layout.image_preview);
ImageView imageView = (ImageView)nagDialog.findViewById(R.id.image_preview);
imageView.setImageResource(R.drawable.img1);
nagDialog.show();
}
});
}

这是我的布局文件,它通过对话框(image_preview.xml(打开:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/image_preview"/>
</RelativeLayout>

适配器类别:


import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.recyclerview.widget.RecyclerView;
import com.squareup.picasso.Picasso;
import com.traveloholic.R;
import com.traveloholic.models.Gallery;
import java.util.ArrayList;
public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.ViewHolder> {
private ArrayList<Gallery> galleryList;
private Context context;
public GalleryAdapter(Context context, ArrayList<Gallery> galleryList) {
this.galleryList = galleryList;
this.context = context;
}
@Override
public GalleryAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.image_cell_layout, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final GalleryAdapter.ViewHolder viewHolder, int i) {
//viewHolder.title.setText(galleryList.get(i).getImageTitle());
viewHolder.img.setScaleType(ImageView.ScaleType.CENTER_CROP);
viewHolder.img.setImageResource((galleryList.get(i).getImageId()));
//Picasso.with(context).load(galleryList.get(i).getImageId()).resize(240, 120).into(viewHolder.img);
viewHolder.img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog nagDialog = new Dialog(context);
nagDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
nagDialog.setCancelable(true);
nagDialog.setContentView(R.layout.image_preview);
Picasso.with(context).load(R.drawable.img1).into((ImageView) nagDialog.findViewById(R.id.image_preview)) ;
nagDialog.show();
}
});
}
@Override
public int getItemCount() {
return galleryList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private TextView title;
private ImageView img;
public ViewHolder(View view) {
super(view);
//title = (TextView)view.findViewById(R.id.title);
img = (ImageView) view.findViewById(R.id.img);
}
}
}

现在,我需要从drawable硬编码设置的ImageResource值(图像将来自API(,而我希望每当我单击图像时,特定的图像都应该在对话框中打开。我试着在谷歌上搜索,但只找到了相同的解决方案,即从drawable硬编码值。我该怎么做??

正如我所看到的,您已经有一个名为galleryListArrayList,您可以从该ArrayList获取URL,如下所示:

onBindViewHolder会给你照片的位置i,所以这行会按位置给你url:

galleryList.get(i).getURL()

getURL()可能不存在于您的Gallery类中,因为您没有发布Gallery模型类

viewHolder.img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Dialog nagDialog = new Dialog(context);
nagDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
nagDialog.setCancelable(false);
nagDialog.setContentView(R.layout.image_preview);
ImageView imageView = (ImageView)nagDialog.findViewById(R.id.image_preview);
Glide
.with(context)
.load(galleryList.get(i).getURL()) <-----
.into(imageView);
nagDialog.show();
}
});

最新更新