我想在适配器文件中检索图像URL

时间:2018-03-07 09:09:39

标签: java android recycler-adapter

我使用模态类和recyclerView类文件在adapter上显示图像, 现在我想在外部共享图像并在手机上下载图像。

但我尝试了很多,我不明白如何在适配器文件中获取图像URL。 请帮我找一个解决方案。

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> {
    private List<Data> data;
    private Context context;

    public ImageAdapter(List<Data> data, Context context) {
        this.data = data;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_design,parent,false);
        return new ImageAdapter.ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        final Data data1=data.get(position);
        ImageView imageView=holder.imageView;
        Glide.with(context)
                .load(data1.getImgUrl())
                .placeholder(R.drawable.logo)
                .into(imageView);
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder{
    public ImageView imageView;
    public ImageButton share,download;
        public ViewHolder(final View itemView) {
            super(itemView);
            imageView=(ImageView)itemView.findViewById(R.id.image);
            share=(ImageButton)itemView.findViewById(R.id.share);
            download=(ImageButton)itemView.findViewById(R.id.download);

            share.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Toast.makeText(context, "url", Toast.LENGTH_SHORT).show();
                    Intent shareIntent = new Intent();
                    shareIntent.setAction(Intent.ACTION_SEND);
                    shareIntent.putExtra(Intent.EXTRA_STREAM,"url here ");
                    shareIntent.setType("images/*");
                   context.startActivity(Intent.createChooser(shareIntent,"Send Via"));
                    shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                }
            });

            download.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });
        }
    }


}

提前感谢。

2 个答案:

答案 0 :(得分:1)

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    final Data data1=data.get(position);
    ImageView imageView=holder.imageView;
    Glide.with(context)
            .load(data1.getImgUrl())
            .placeholder(R.drawable.logo)
            .into(imageView);
}

替换它
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    final Data data1=data.get(position);
    ImageView imageView=holder.imageView;
    holder.share.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Toast.makeText(context, "url", Toast.LENGTH_SHORT).show();
                Intent shareIntent = new Intent();
                shareIntent.setAction(Intent.ACTION_SEND);
                shareIntent.putExtra(Intent.EXTRA_STREAM,getLocalBitmapUri(getBitmapFromURL(data1.getImgUrl())));
                shareIntent.setType("images/*");
                shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  context.startActivity(Intent.createChooser(shareIntent,"Send Via"));

            }
        });


    Glide.with(context)
            .load(data1.getImgUrl())
            .placeholder(R.drawable.logo)
            .into(imageView);
}

还要添加

  public Uri getLocalBitmapUri(Bitmap bmp) {
    Uri bmpUri = null;
    try {
        File file =  new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "image" + System.currentTimeMillis() + ".png");
        FileOutputStream out = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
        out.close();
        bmpUri = Uri.fromFile(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bmpUri;
}

 fun getBitmapFromURL(strURL: String): Bitmap? {
    return try {
        val url = URL(strURL)
        val connection = url.openConnection() as HttpURLConnection
        connection.doInput = true
        connection.connect()
        val input = connection.inputStream
        BitmapFactory.decodeStream(input)
    } catch (e: IOException) {
        e.printStackTrace()
        null
    }

}

答案 1 :(得分:0)

您正在从列表中获取图片网址,在共享之前您必须使用Picasso将网址加载到位图中。之后

 share.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     shareItem(data1.getImgUrl()) 
                }
            });


    public void shareItem(String url) {
        Picasso.with(getApplicationContext()).load(url).into(new Target() {
            @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                Intent i = new Intent(Intent.ACTION_SEND);
                i.setType("image/*");
                i.putExtra(Intent.EXTRA_STREAM, getLocalBitmapUri(bitmap));
                startActivity(Intent.createChooser(i, "Share Your Image"));
            }
            @Override public void onBitmapFailed(Drawable errorDrawable) { }
            @Override public void onPrepareLoad(Drawable placeHolderDrawable) { }
        });
    }

Bitmap转换为URi

public Uri getLocalBitmapUri(Bitmap bmp) {
    Uri bmpUri = null;
    try {
        File file =  new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "image" + System.currentTimeMillis() + ".png");
        FileOutputStream out = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
        out.close();
        bmpUri = Uri.fromFile(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bmpUri;
}

希望它能帮到你!!