[英]Using same writeToFile to write different arraylists in java
[英]How to set OnClickListener to get position of different ArrayLists using same Adapter java class?
我正在制作一个Android应用,目前有3种不同的活动。 一个在Recyclerview中显示来自Flickr的“ 最近 ”图像,另一个在Recyclerview中显示来自Flickr的“ 有趣 ”图像,以及“ Details ”( 详细信息 )活动,该活动显示较大的图像视图以及有关特定照片的更多信息。点击。
我有两个ArrayLists: 最近图像列表和趣味图像列表 ,它们使用相同的Adapter类在其Recyclerviews中显示不同的图像及其属性(标题,所有者等),具体取决于活动。
我正在进行这两项活动并显示正确的内容,当我单击“最近的”照片时,它在“详细信息”页面上显示了相同的“最近的”照片。
但是我的问题是,当单击“有趣”图像时,它将“最近”图像的位置传递到Intent,而不是我单击的“有趣”图像的位置。 因此,这将在“详细信息”活动中显示“近期”图像,而不是我单击的“有趣”照片。
我不确定如何在我的onClickListener中传递有趣的ImageList数组项的正确位置,以便在“详细信息”活动中显示正确的对应图像。 我是否需要在OnClickListener中使用某种if语句来确定将哪个arraylist位置传递给该意图?
谢谢您能提供的任何帮助。 请参见下面的ImageListAdapter类的代码:
public class ImageListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
ArrayList<ImageInfo> recentImageList;
ArrayList<ImageInfo> interestingImageList;
private int whichActivity;
public ImageListAdapter(Context context, ArrayList<ImageInfo> recentImageList,
ArrayList<ImageInfo> interestingImageList, int whichView) {
this.context = context;
this.recentImageList = recentImageList;
this.interestingImageList = interestingImageList;
whichActivity = whichView;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(context).inflate(R.layout.cell_image_card, parent, false);
return new ImageViewHolder(itemView);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
if (whichActivity == 0) {
((ImageViewHolder) viewHolder).populate(recentImageList.get(position));
ImageInfo recentInfo = recentImageList.get(position);
} else if (whichActivity == 1) {
((ImageViewHolder) viewHolder).populate(interestingImageList.get(position - recentImageList.size()));
ImageInfo interestingInfo = interestingImageList.get(position);
}
}
@Override
public int getItemCount() {
return recentImageList.size() + interestingImageList.size();
}
public class ImageViewHolder extends RecyclerView.ViewHolder {
public TextView imageTitle, ownerTitle, tags;
public NetworkImageView mainImage, ownerImage;
public ImageViewHolder(View itemView) {
super(itemView);
imageTitle = (TextView) itemView.findViewById(R.id.imageTitle);
ownerTitle = (TextView) itemView.findViewById(R.id.ownerTitle);
mainImage = (NetworkImageView) itemView.findViewById(R.id.mainImage);
mainImage.setOnClickListener(onClick);
ownerImage = (CircularNetworkImageView) itemView.findViewById(R.id.ownerImage);
}
public void populate(ImageInfo imageInfo) {
ownerTitle.setText(imageInfo.owner);
imageTitle.setText(imageInfo.title);
mainImage.setImageUrl(imageInfo.url_m, NetworkMgr.getInstance(context).imageLoader);
ownerImage.setImageUrl(imageInfo.ownerPic, NetworkMgr.getInstance(context).imageLoader);
}
View.OnClickListener onClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, DetailsActivity.class);
int position = ImageViewHolder.this.getLayoutPosition();
intent.putExtra("PHOTO_POSITION", position);
context.startActivity(intent);
}
};
}
}
您需要两个不同的适配器实例,每个实例用于每个列表,这似乎是错误的实现
每个recyclerview应该具有自己的适配器实例。 例如
new
ImageListAdapter(this, recentImageList, null, whichView);
和
new
ImageListAdapter(this, null , interestingImageList,whichView);
对于两个不同的RecyclerView,您将需要两个适配器实例。 要转到明细活动,最好获得活动中选定或单击的项目位置,然后从当前活动开始明细活动。 要从适配器获取选定位置,可以使用界面。 这是一个开源的RecyclerView-Listener库,用于获取所选项目的位置。 您可以使用它或理解概念并实现自己。
谢谢你们每一个人的帮助! 我已经解决了!
我意识到我的原始代码是正确的,但是我的Details Activity中的这一行是:photo = NetworkMgr.getInstance(this).recentImageList.get(photoPosition); 就是问题所在,因为此行仅检索最近图像的位置,而没有考虑有趣的图像。 因此,在我的OnClickListener中,我为两个whichActivitys和putExtra使用了if语句,以确定一个arraylist需要在Details活动中检索其位置。 见下文:
ImageListAdapter-
View.OnClickListener onClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (whichActivity == 0) {
Intent intent = new Intent(context, DetailsActivity.class);
int position = ImageViewHolder.this.getLayoutPosition();
int imageListCode = 1;
intent.putExtra("PHOTO_POSITION", position);
intent.putExtra("IMAGELIST_CODE", imageListCode);
context.startActivity(intent);
}
else if (whichActivity == 1) {
Intent intent = new Intent(context, DetailsActivity.class);
int position = ImageViewHolder.this.getLayoutPosition();
int imageListCode = 2;
intent.putExtra("PHOTO_POSITION", position);
intent.putExtra("IMAGELIST_CODE", imageListCode);
context.startActivity(intent);
}
}
};
详细活动-
Intent intent = getIntent();
photoPosition = intent.getIntExtra("PHOTO_POSITION", 0);
code = intent.getIntExtra("IMAGELIST_CODE", 0);
if (code == 1) {
photo = NetworkMgr.getInstance(this).recentImageList.get(photoPosition);
}
else if (code == 2) {
photo = NetworkMgr.getInstance(this).interestingImageList.get(photoPosition);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.