只有点击的项目可见并隐藏 RecyclerView 中的可渗透项目
Only clicked item visible and hide the pervious items in RecyclerView
我在 RecyclerView
中的一个项目中有 ImageView
。每次我点击一个项目时,我希望图像变得可见,而之前点击的项目的图像变得不可见。
public static class MyHolder extends RecyclerView.ViewHolder {
private ImageView image_view;
private TextView text_view_name;
private TextView text_view_abilities;
private ImageView heart_image_view;
public MyHolder(@NonNull final View itemView, final OnItemClickListener listener) {
super(itemView);
image_view = itemView.findViewById(R.id.image_view);
text_view_name = itemView.findViewById(R.id.text_view_name);
text_view_abilities = itemView.findViewById(R.id.text_view_abilities);
heart_image_view = itemView.findViewById(R.id.heart_image_view);
heart_image_view.setImageResource(R.drawable.heart);
heart_image_view.setVisibility(View.GONE);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
listener.onItemClick(position);
heart_image_view.setVisibility(View.VISIBLE);
}
}
});
}
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.single_item_layout, viewGroup, false);
MyHolder holder = new MyHolder(v, mlistener);
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyHolder myHolder, int position) {
Item item = myList.get(position);
myHolder.text_view_name.setText(item.getTitle());
stringArray = item.getAbilitiesObj();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < stringArray.size(); i++) {
try {
builder.append(stringArray.get(i));
builder.append(", ");
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
myHolder.text_view_abilities.setText(builder);
}
if (myHolder.image_view != null) {
String photoUrl = item.getImageUrl();
Picasso.with(mContext).load(photoUrl).into(myHolder.image_view);
}
}
在 MyHolder
class 中 item.setOnClick
,我将点击的项目图像设置为可见,但每次我点击另一个项目时,新项目的图像就会变得可见,并且上一个项目的图像不会变得不可见。
您需要在您的适配器中有另一个整数数组来跟踪被点击的项目。首先,用全 1 初始化整数数组。
// Define an array like the following in your adapter
private int[] selectedItems = new int[yourDataList.size()]; // Initialize the array to have the same size as your data list.
然后用全1初始化数组。尝试在您的适配器中使用这样的功能。
private void initializeSeledtedItems() {
for(int item : selectedItems) item = 1;
}
现在,在您的 onBindViewHolder
中,根据在 selectedItems
数组中找到的值,设置 ImageView
在 RecyclerView
项目中的可见性。
if(selectedItems[position] == 1) heart_image_view.setVisibility(View.VISIBLE);
else heart_image_view.setVisibility(View.GONE);
在 onClickListener
中修改 selectedItems
数组,只有所选项目的值为 1,其他所有项目的值为零。然后调用 notifyDataSetChanged
使您的更改生效。
private void setSelectedItem(int position) {
for(int i = 0; i < selectedItems.length(); i++) {
if(i == position) selectedItems[i] = 1;
else selectedItems[i] = 0;
}
}
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
setSelectedItem(position);
notifyDataSetChanged();
}
}
}
});
希望对您有所帮助!
我的代码用于设置回收站视图项目的可见性,当您单击回收站视图项目时,它会在该特定项目上设置 VISIBLE,在其他项目上设置 INVISIBLE。
此代码适用于我设置点击项目的可见性并隐藏上一个图标。
初始化
int selecteditem =0;
onBindViewHolder
if(selecteditem==position){
holder.icSelect.setVisibility(View.VISIBLE);
}
else{
holder.icSelect.setVisibility(View.INVISIBLE);
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selecteditem=position;
holder.icselect.setVisibility(View.VISIBLE);
notifyDataSetChanged();
}
});
我上传了基本概念图片。
enter image description here
我在 RecyclerView
中的一个项目中有 ImageView
。每次我点击一个项目时,我希望图像变得可见,而之前点击的项目的图像变得不可见。
public static class MyHolder extends RecyclerView.ViewHolder {
private ImageView image_view;
private TextView text_view_name;
private TextView text_view_abilities;
private ImageView heart_image_view;
public MyHolder(@NonNull final View itemView, final OnItemClickListener listener) {
super(itemView);
image_view = itemView.findViewById(R.id.image_view);
text_view_name = itemView.findViewById(R.id.text_view_name);
text_view_abilities = itemView.findViewById(R.id.text_view_abilities);
heart_image_view = itemView.findViewById(R.id.heart_image_view);
heart_image_view.setImageResource(R.drawable.heart);
heart_image_view.setVisibility(View.GONE);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
listener.onItemClick(position);
heart_image_view.setVisibility(View.VISIBLE);
}
}
});
}
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.single_item_layout, viewGroup, false);
MyHolder holder = new MyHolder(v, mlistener);
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyHolder myHolder, int position) {
Item item = myList.get(position);
myHolder.text_view_name.setText(item.getTitle());
stringArray = item.getAbilitiesObj();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < stringArray.size(); i++) {
try {
builder.append(stringArray.get(i));
builder.append(", ");
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
myHolder.text_view_abilities.setText(builder);
}
if (myHolder.image_view != null) {
String photoUrl = item.getImageUrl();
Picasso.with(mContext).load(photoUrl).into(myHolder.image_view);
}
}
在 MyHolder
class 中 item.setOnClick
,我将点击的项目图像设置为可见,但每次我点击另一个项目时,新项目的图像就会变得可见,并且上一个项目的图像不会变得不可见。
您需要在您的适配器中有另一个整数数组来跟踪被点击的项目。首先,用全 1 初始化整数数组。
// Define an array like the following in your adapter
private int[] selectedItems = new int[yourDataList.size()]; // Initialize the array to have the same size as your data list.
然后用全1初始化数组。尝试在您的适配器中使用这样的功能。
private void initializeSeledtedItems() {
for(int item : selectedItems) item = 1;
}
现在,在您的 onBindViewHolder
中,根据在 selectedItems
数组中找到的值,设置 ImageView
在 RecyclerView
项目中的可见性。
if(selectedItems[position] == 1) heart_image_view.setVisibility(View.VISIBLE);
else heart_image_view.setVisibility(View.GONE);
在 onClickListener
中修改 selectedItems
数组,只有所选项目的值为 1,其他所有项目的值为零。然后调用 notifyDataSetChanged
使您的更改生效。
private void setSelectedItem(int position) {
for(int i = 0; i < selectedItems.length(); i++) {
if(i == position) selectedItems[i] = 1;
else selectedItems[i] = 0;
}
}
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
setSelectedItem(position);
notifyDataSetChanged();
}
}
}
});
希望对您有所帮助!
我的代码用于设置回收站视图项目的可见性,当您单击回收站视图项目时,它会在该特定项目上设置 VISIBLE,在其他项目上设置 INVISIBLE。
此代码适用于我设置点击项目的可见性并隐藏上一个图标。
初始化
int selecteditem =0;
onBindViewHolder
if(selecteditem==position){
holder.icSelect.setVisibility(View.VISIBLE);
}
else{
holder.icSelect.setVisibility(View.INVISIBLE);
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selecteditem=position;
holder.icselect.setVisibility(View.VISIBLE);
notifyDataSetChanged();
}
});
我上传了基本概念图片。
enter image description here