gpt4 book ai didi

java - 如何确定在 recyclerview 布局上单击了哪个卡片 View ?

转载 作者:行者123 更新时间:2023-12-04 08:10:51 25 4
gpt4 key购买 nike

例如,我有一个 UI,其中每个 recycleView“位置”由两个 CardView 组成,如下所示:
Image
在使用 recycleview.view 持有人时,我可以通过使用“getAdapterPosition()”onClick 方法来确定用户单击屏幕的位置,但我无法确定它是哪个卡片 View ,即左侧或右侧卡片 View (例如在此 Image 示例中 - 鉴于位置为 0,我无法确定它是“播客”还是“图表”)
如何确定用户点击了哪个卡片 View - 即向左还是向右?
下面是我的 RecycleViewAdpater 代码:

public class DisplayGenresRecyclerViewAdapter extends RecyclerView.Adapter<DisplayGenresRecyclerViewAdapter.ViewHolder> {

// Cursor cursor = null;
Context context;
ArrayList<SuperGenreDouble> uniqueGenre;
private LayoutInflater inflater;
private ItemClickListener clickListener;


public DisplayGenresRecyclerViewAdapter(Context context, ArrayList<SuperGenreDouble> uniqueGenre) {
this.context = context;
this.inflater = LayoutInflater.from(context);
this.uniqueGenre = uniqueGenre;
}

public static String toTitleCase(String givenString) {
String[] arr = givenString.split(" ");
StringBuffer sb = new StringBuffer();

for (int i = 0; i < arr.length; i++) {
sb.append(Character.toUpperCase(arr[i].charAt(0)))
.append(arr[i].substring(1)).append(" ");
}
return sb.toString().trim();
}

public static String removeSpacing(String givenString) {
StringBuffer sb = new StringBuffer();

for (int i = 0; i < givenString.length(); i++) {
if (!givenString.contains(" ")) {
sb.append(givenString.charAt(i));
}
}

return sb.toString().trim();
}

public static int getDominantColor(Bitmap bitmap) {
Bitmap newBitmap = Bitmap.createScaledBitmap(bitmap, 1, 1, true);
final int color = newBitmap.getPixel(0, 0);
newBitmap.recycle();
return color;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.display_super_genres_recycle_view_container, parent, false);
return new ViewHolder(view);
}


@Override
public void onBindViewHolder(ViewHolder holder, int position) {


String path;
String genreRight = uniqueGenre.get(position).superGenre1;
String imageArtistRight = uniqueGenre.get(position).superGenreImageUrl1;
String genreLeft = uniqueGenre.get(position).superGenre2;
String imageArtistLeft = uniqueGenre.get(position).superGenreImageUrl2;

if (genreLeft != null) {
holder.textViewLeft.setText(toTitleCase(genreLeft));
try {
// get the image
Picasso.get().load(imageArtistLeft).into(holder.imageGenreLeft, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
// set the color
Bitmap bitmap = ((BitmapDrawable) holder.imageGenreLeft.getDrawable()).getBitmap();
int color = getDominantColor(bitmap);
holder.cardColourLeft.setBackgroundColor(color);
holder.textViewLeft.setTextColor(lightenColor(color));
}

@Override
public void onError(Exception e) {

}

});


} catch (Exception e) {

}

}
if (genreRight != null) {
holder.textViewRight.setText(toTitleCase(genreRight));
try {
// get the image
Picasso.get().load(imageArtistRight).into(holder.imageGenreRight, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
// set the color
Bitmap bitmap = ((BitmapDrawable) holder.imageGenreRight.getDrawable()).getBitmap();
int color = getDominantColor(bitmap);
holder.cardColourRight.setBackgroundColor(color);
holder.textViewRight.setTextColor(lightenColor(color));
}

@Override
public void onError(Exception e) {

}

});


} catch (Exception e) {

}


}


}

@ColorInt
int lightenColor(@ColorInt int color) {
return Color.rgb(255-(color >> 8)&0xFF, 255-(color >> 8)&0xFF, 255-(color >> 8)&0xFF);
}


@Override
public int getItemCount() {

return uniqueGenre.size();

}

void setClickListener(ItemClickListener itemClickListener) {
Log.d("onBindViewHolder", "onBindViewHolder: length");
this.clickListener = itemClickListener;
}

public interface ItemClickListener {
void onItemClick(View view, int position);
}



public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

TextView textViewLeft;
TextView textViewRight;
ImageView imageGenreLeft;
ImageView imageGenreRight;
CardView cardColourRight;
CardView cardColourLeft;

ViewHolder(View itemView) {
super(itemView);
textViewLeft = itemView.findViewById(R.id.textViewLeft);
textViewRight = itemView.findViewById(R.id.textViewRight);

imageGenreLeft = itemView.findViewById(R.id.imageGenreLeft);
imageGenreRight = itemView.findViewById(R.id.imageGenreRight);

cardColourRight = itemView.findViewById(R.id.cardViewRight);
cardColourLeft = itemView.findViewById(R.id.cardViewLeft);

itemView.setOnClickListener(this);


}


@Override
public void onClick(View view) {


Log.d("myPos", getAdapterPosition());



}
}
}


最佳答案

RecyclerView 中获得头寸时您必须注意,您正在获取 ViewHolder 的位置而不是 View ElementsViewHolder .因此,对于您的问题,您可以做的是实现 onClickListenerView你想要这样:

ViewHolder(View itemView) {
cardColourRight = itemView.findViewById(R.id.cardViewRight);
cardColourLeft = itemView.findViewById(R.id.cardViewLeft);
//add these
cardColourRight.setOnClickListener(this);
cardColourLeft.setOnClickListener(this);
}

@Override
public void onClick(View view) {

if(view == R.id.cardViewLeft){
//User has clicked Left
}
else if(view == R.id.cardViewRight){
//User has clicked Right
}
}

关于java - 如何确定在 recyclerview 布局上单击了哪个卡片 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65968912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com