Java 我想在适配器文件中检索图像url
我使用模态类和适配器在Java 我想在适配器文件中检索图像url,java,android,android-recyclerview,Java,Android,Android Recyclerview,我使用模态类和适配器在recyclerView类文件上显示图像, 现在我想在外部共享图像,并在手机上下载图像 但我尝试了很多,我不明白如何在适配器文件中获取图像URL。 请帮我找到解决办法 public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ViewHolder> { private List<Data> data; private Context context;
recyclerView
类文件上显示图像,
现在我想在外部共享图像,并在手机上下载图像
但我尝试了很多,我不明白如何在适配器文件中获取图像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) {
}
});
}
}
}
公共类ImageAdapter扩展了RecyclerView.Adapter{
私人名单数据;
私人语境;
公共ImageAdapter(列表数据、上下文){
这个数据=数据;
this.context=上下文;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View-View=LayoutFlater.from(parent.getContext()).flate(R.layout.layout\u design,parent,false);
返回新的ImageAdapter.ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
最终数据data1=数据获取(位置);
ImageView ImageView=holder.ImageView;
带(上下文)滑动
.load(data1.getImgUrl())
.占位符(R.可绘制.徽标)
.进入(图像视图);
}
@凌驾
public int getItemCount(){
返回data.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共影像视图;
公共图像按钮共享,下载;
公共视图持有者(最终视图项视图){
超级(项目视图);
imageView=(imageView)itemView.findViewById(R.id.image);
share=(ImageButton)itemView.findViewById(R.id.share);
下载=(ImageButton)itemView.findViewById(R.id.download);
share.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//Toast.makeText(上下文,“url”,Toast.LENGTH_SHORT).show();
意向共享意向=新意向();
shareIntent.setAction(Intent.ACTION\u SEND);
shareIntent.putExtra(Intent.EXTRA_流,“url在此”);
setType(“images/*”);
context.startActivity(Intent.createChooser(shareIntent,“发送方式”);
setFlags(Intent.FLAG\u活动\u新任务);
}
});
下载.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
}
});
}
}
}
提前谢谢
@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;
}
及
您正在从列表中获取图像url,在共享之前,您必须使用
Picasso
将url加载到位图中。之后
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;
}
希望它能帮助你 从适配器参数中的适配器调用发送url、字符串或数组列表。谢谢
data1.getImgUrl()
返回了什么?我正在从API文件中提取。使用getter和setter类。公共类数据实现可序列化的{private int id;private String imgUrl;公共数据(int id,String imgUrl){this.id=id;this.imgUrl=imgUrl;}public int getId(){return id;}public void setId(int id){this.id=id;}public String getImgUrl(){return imgUrl;}public void setImgUrl(String imgUrl){this.imgUrl=imgUrl;}}@HemantParmar向我显示了每个图像上的链接。但当我直接从url共享时,它不起作用。你必须将图像uri转换为位图,我发布ans have look。谢谢,但这向我显示了android.util.AndroidRuntimeException:调用startActivity()从活动上下文外部需要标志\u Activity\u NEW\u TASK标志。这真的是您想要的吗?但是我已经添加了一个标志Activitycan您可以将代码发送给我,在那里填充适配器您正在用java为我提供一些函数。kotlin中有一些函数。抱歉,我正在处理这两个函数,所以没有转换另一个……您在哪里发布了该函数代码..我找不到它否,它显示了如何实现所有Target()方法,并且data1=data.getimgurl()不起作用
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;
}