我想一次只在一个回收视图中显示此LinearLayout



我已经附上了我的回收视图的图像,在我的onClick方法中,我用一些图像按钮显示或隐藏了一个线性布局,但当我点击另一个回收视图项目时,我想隐藏线性布局,基本上,带按钮的线性布局应该只显示在一个项目中。有人能给我指路吗?

下面看看现在的情况,我不想发生这种情况。

[![在此输入图像描述][1]][1]

公共类AdapterExpensesRecyclerView扩展了RecyclerView.Adapter<AdapterExpensesCyclerView.ExenseViewHolder>{

private final RecyclerViewInterface recyclerViewInterface;
List<Expense> expenseList;
public AdapterExpensesRecyclerView(List<Expense> expenseList, RecyclerViewInterface recyclerViewInterface) {
this.expenseList = expenseList;
this.recyclerViewInterface = recyclerViewInterface;
}
@NonNull
@Override
public ExpenseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.retrieve_layout, parent, false);
ExpenseViewHolder holder = new ExpenseViewHolder(v, recyclerViewInterface);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ExpenseViewHolder holder, int position) {
Expense expense = expenseList.get(position);
holder.item.setText("" + expense.getItem());
holder.category.setText("" + expense.getCategory());
holder.date.setText("" + expense.getDate());
holder.amount.setText("$ " + formatNumberCurrency(String.valueOf(expense.getAmount())));
}
@Override
public int getItemCount() {
return expenseList.size();
}
public void filterList(ArrayList<Expense> filteredList) {
expenseList = filteredList;
notifyDataSetChanged();
}
public static class ExpenseViewHolder extends RecyclerView.ViewHolder {
TextView item;
TextView category;
TextView date;
TextView amount;
LinearLayout single_item_options;
private Boolean gone_selection = true;
public ExpenseViewHolder(@NonNull View itemView, RecyclerViewInterface recyclerViewInterface) {
super(itemView);
item = itemView.findViewById(R.id.list_item_name);
category = itemView.findViewById(R.id.list_item_category);
date = itemView.findViewById(R.id.list_item_date);
amount = itemView.findViewById(R.id.list_item_amount);
//recyclerView single options
single_item_options = itemView.findViewById(R.id.single_item_options);
ImageView edit_btn = itemView.findViewById(R.id.edit_btn);
ImageView duplicate_btn = itemView.findViewById(R.id.duplicate_btn);
ImageView delete_btn = itemView.findViewById(R.id.delete_btn);
single_item_options.setVisibility(View.GONE);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (recyclerViewInterface != null) {
int pos = getAdapterPosition();
if (pos != RecyclerView.NO_POSITION) {
recyclerViewInterface.onItemClick(pos);
if (gone_selection) {
single_item_options.setVisibility(View.VISIBLE);
gone_selection = false;
} else {
single_item_options.setVisibility(View.GONE);
gone_selection = true;
}
}
}
}
});
edit_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (recyclerViewInterface != null) {
int pos = getAdapterPosition();
if (pos != RecyclerView.NO_POSITION) {
recyclerViewInterface.onEdit(pos);
}
}
single_item_options.setVisibility(View.GONE);
gone_selection = true;
}
});
duplicate_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (recyclerViewInterface != null) {
int pos = getAdapterPosition();
if (pos != RecyclerView.NO_POSITION) {
recyclerViewInterface.onDuplicate(pos);
}
}
single_item_options.setVisibility(View.GONE);
gone_selection = true;
}
});
delete_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (recyclerViewInterface != null) {
int pos = getAdapterPosition();
if (pos != RecyclerView.NO_POSITION) {
recyclerViewInterface.onDelete(pos);
}
}
gone_selection = true;
}
});
}
}

尝试这种方法。步骤1:获取视图位置步骤2:如果点击的视图位置与您之前获得的位置相同,则比较该位置
步骤3:根据位置执行逻辑

您对两个ViewHolder感兴趣(其中一个在任何给定时间都可能不可见(:显示线性布局的当前ViewHolder;以及要显示线性布局的新ViewHolder。

为各个项目中的每一个调用RecyclerView.findViewHolderForItemId (long id)RecyclerView.findViewHolderForAdapterPostion()。一旦有了它们,请在ViewHolder类上调用appropiate自定义方法,以显示或隐藏绑定ViewHolder的线性布局。如果任何一个findViewHolderForItemId调用返回null,则表示您的项目不可见,因此不需要进行任何更改。只要确保在ViewHolder.bind((方法中,当焦点项目变为可见时,适当地显示或隐藏LinearLayout即可。

您可以通过以下步骤来完成。

在适配器类中声明一个变量,如"visiblePosition",并在OnClick 中分配position的值

然后在onBindViewHolder中检查以下条件

if(visiblePosition == position){
//Show You Layout
}else{
//Hide You Layout
}

最新更新