将图像从 RecyclerView.Adapter 中的 SimpleDraweeView 传递到 android 中的



我正在使用RecyclerView.Adapter在Activity1中显示图像。我想向每个图像添加按钮功能,以便在另一个活动 (Activity2( 中显示相同的图像。每个图像都是 webp,显示在 SimpleDraweeView 的活动 1 中。 我在 onCreateViewHolder 中添加了 setOnClickListener,所以现在视图就像一个按钮,但是我如何在每次点击时读取正确的图像并将其传递给 Activity2? (这是来自示例WhatsApp贴纸应用程序的基本代码,我正在尝试修改(。

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class StickerPreviewAdapter extends RecyclerView.Adapter<StickerPreviewViewHolder> {
@NonNull
private StickerPack stickerPack;
private final int cellSize;
private int cellLimit;
private int cellPadding;
private final int errorResource;

private final LayoutInflater layoutInflater;
private Context mContext;
public Context context;
public String packageName;
public String stickerName;
StickerPreviewAdapter(
@NonNull final LayoutInflater layoutInflater,
final int errorResource,
final int cellSize,
final int cellPadding,
@NonNull final StickerPack stickerPack) {
this.cellSize = cellSize;
this.cellPadding = cellPadding;
this.cellLimit = 0;
this.layoutInflater = layoutInflater;
this.errorResource = errorResource;
this.stickerPack = stickerPack;
this.mContext = StickerApplication.getContext();
}
@NonNull
@Override
public StickerPreviewViewHolder onCreateViewHolder(@NonNull final ViewGroup viewGroup, final int i) {
View itemView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.sticker_image, viewGroup, false);
itemView.setOnClickListener(v ->{
});
StickerPreviewViewHolder vh = new StickerPreviewViewHolder(itemView);
ViewGroup.LayoutParams layoutParams = vh.stickerPreviewView.getLayoutParams(); 
//stickerPreviewView is SimpleDraweeView
layoutParams.height = cellSize;
layoutParams.width = cellSize;
vh.stickerPreviewView.setLayoutParams(layoutParams);
vh.stickerPreviewView.setPadding(cellPadding, cellPadding, cellPadding, cellPadding);
return vh;
}

@Override
public void onBindViewHolder(@NonNull final StickerPreviewViewHolder stickerPreviewViewHolder, final int i) {
stickerPreviewViewHolder.stickerPreviewView.setImageResource(errorResource);
packageName = stickerPack.identifier;
stickerName = stickerPack.getStickers().get(i).imageFileName;
stickerPreviewViewHolder.stickerPreviewView.setImageURI(StickerPackLoader.getStickerAssetUri(packageName, stickerName));
}
@Override
public int getItemCount() {
int numberOfPreviewImagesInPack;
numberOfPreviewImagesInPack = stickerPack.getStickers().size();
if (cellLimit > 0) {
return Math.min(numberOfPreviewImagesInPack, cellLimit);
}
return numberOfPreviewImagesInPack;
}
}

工作代码: (感谢达风的帮助(

活动1:

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class StickerPreviewAdapter extends RecyclerView.Adapter<StickerPreviewViewHolder> {
@NonNull
private StickerPack stickerPack;
private final int cellSize;
private int cellLimit;
private int cellPadding;
private final int errorResource;

private final LayoutInflater layoutInflater;
private Context mContext;
public Context context;
StickerPreviewAdapter(
@NonNull final LayoutInflater layoutInflater,
final int errorResource,
final int cellSize,
final int cellPadding,
@NonNull final StickerPack stickerPack) {
this.cellSize = cellSize;
this.cellPadding = cellPadding;
this.cellLimit = 0;
this.layoutInflater = layoutInflater;
this.errorResource = errorResource;
this.stickerPack = stickerPack;
this.mContext = StickerApplication.getContext();
}
@NonNull
@Override
public StickerPreviewViewHolder onCreateViewHolder(@NonNull final ViewGroup viewGroup, final int i) {
View itemView=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.sticker_image, viewGroup, false);
StickerPreviewViewHolder vh = new StickerPreviewViewHolder(itemView);
ViewGroup.LayoutParams layoutParams = vh.stickerPreviewView.getLayoutParams();
layoutParams.height = cellSize;
layoutParams.width = cellSize;
vh.stickerPreviewView.setLayoutParams(layoutParams);
vh.stickerPreviewView.setPadding(cellPadding, cellPadding, cellPadding, cellPadding);
return vh;
}
@Override
public void onBindViewHolder(@NonNull final StickerPreviewViewHolder stickerPreviewViewHolder, final int i) {
stickerPreviewViewHolder.stickerPreviewView.setImageResource(errorResource);
String packageName = stickerPack.identifier;
String stickerName = stickerPack.getStickers().get(i).imageFileName;
stickerPreviewViewHolder.stickerPreviewView.setImageURI(StickerPackLoader.getStickerAssetUri(packageName, stickerName));
mContext = stickerPreviewViewHolder.stickerPreviewView.getContext();
stickerPreviewViewHolder.itemView.setOnClickListener(v ->{
Intent stickerIntent = new Intent(mContext, StickerDetailsActivity.class);
stickerIntent.putExtra("nameOfSticker", stickerName);
stickerIntent.putExtra("nameOfPackage", packageName);
mContext.startActivity(stickerIntent);
});

}
@Override
public int getItemCount() {
int numberOfPreviewImagesInPack;
numberOfPreviewImagesInPack = stickerPack.getStickers().size();
if (cellLimit > 0) {
return Math.min(numberOfPreviewImagesInPack, cellLimit);
}
return numberOfPreviewImagesInPack;
}
}

活动2:

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
import java.io.IOException;
import java.io.InputStream;
public class StickerDetailsActivity extends AddStickerPackActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sticker_details);
ImageView stickerView = findViewById(R.id.sticker_view);
Intent stickerInt = getIntent();
String nameOfSticker = stickerInt.getStringExtra("nameOfSticker");
String nameOfPackage = stickerInt.getStringExtra("nameOfPackage");
try {
InputStream stream = getAssets().open(nameOfPackage + "/" + nameOfSticker);
Bitmap stickerBitmap = BitmapFactory.decodeStream(stream);
stickerView.setImageBitmap(stickerBitmap);
} catch (IOException e) {
e.printStackTrace();
}
}

最新更新