【问题标题】:How to remove Button/view from all the items in RecyclerView?如何从 RecyclerView 中的所有项目中删除按钮/视图?
【发布时间】:2019-11-02 19:01:09
【问题描述】:

我有一个基本的水平 recyclerView,它在所有项目中都有按钮。当用户单击任一项目中的按钮时,我希望删除该按钮或从 recyclerView 中的所有项目中消失。

这是我的代码:

 @Override
public void onBindViewHolder(SingleItemRowHolder holder, int i) {

    holder.button.setOnClickListener(v -> {
        v.postDelayed(() -> holder.likes.setVisibility(View.GONE),500);
    });

}

这段代码仅删除已单击项目中的按钮。如何解决?

编辑

private ArrayList<SingleItemModel> itemsList;
private Context mContext;

SectionListDataAdapter(Context context, ArrayList<SingleItemModel> itemsList) {
    this.itemsList = itemsList;
    this.mContext = context;
}

@Override
public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(mContext).inflate(R.layout.horizontal_single_row, viewGroup, false);
    SingleItemRowHolder mh = new SingleItemRowHolder(v);
    return mh;
}

boolean a;
@Override
public void onBindViewHolder(SingleItemRowHolder holder, int i) {

    holder.likes.setOnClickListener(v -> {
        v.postDelayed(() -> holder.button.setVisibility(View.GONE),500);

    });

}

@Override
public int getItemCount() {
    return (null != itemsList ? itemsList.size() : 0);
}

class SingleItemRowHolder extends RecyclerView.ViewHolder {

    ImageButton button;

    SingleItemRowHolder(View view) {
        super(view);
        this.button = view.findViewById(R.id.profilePic);

    }

}

【问题讨论】:

  • 您想删除/隐藏仅点击的按钮或除此之外的所有按钮吗?
  • 我想删除回收站所有项目中的按钮,包括我点击的那个。
  • 创建一个布尔变量为true,当按下按钮时将其设置为false并调用notifydatasetchange。当您为小部件/字段分配值时,检查该变量,如果为 false,则隐藏按钮。

标签: android android-recyclerview


【解决方案1】:

试试这个

private ArrayList<SingleItemModel> itemsList;
private Context mContext;
private boolean isClick = true;

SectionListDataAdapter(Context context, ArrayList<SingleItemModel> itemsList) {
    this.itemsList = itemsList;
    this.mContext = context;
}

@Override
public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(mContext).inflate(R.layout.horizontal_single_row, viewGroup, false);
    SingleItemRowHolder mh = new SingleItemRowHolder(v);
    return mh;
}

@Override
public void onBindViewHolder(SingleItemRowHolder holder, int i) {

    holder.likes.setOnClickListener(v -> {
        v.postDelayed(() -> {
        holder.button.setVisibility(View.GONE);
        isClick = false;
        notifyDataSetChanged();
        },500);
    });

    if(isClick){
        holder.binding.llShare.setVisibility(View.VISIBLE);
    }else{
        holder.binding.llShare.setVisibility(View.GONE);
    }

}

@Override
public int getItemCount() {
    return (null != itemsList ? itemsList.size() : 0);
}

class SingleItemRowHolder extends RecyclerView.ViewHolder {

    ImageButton button;

    SingleItemRowHolder(View view) {
        super(view);
        this.button = view.findViewById(R.id.profilePic);

    }
}

这是您问题的完美答案。

希望对你有帮助!

谢谢。

【讨论】:

  • 我只需要隐藏回收站中所有项目的按钮。 arraylist.clear 删除 recycler 中的所有项目
  • @raghhav 最受欢迎。这个答案非常有效,你能给出标记答案吗?您标记的答案代码格式不正确,缺少括号,并且有时可能会出现问题,因为视图未设置为可见的任何位置因此,它生成的可能是错误的,我为您提供完整的适配器代码。
  • @HardikTalaviya 谢谢你的建议,告诉我我的错误。下次我会比你做得更好:) 每一个小错误都是一个新的成功。感谢您推动我走向成功:)
【解决方案2】:
    private boolean isShow=false;
    public void onBindViewHolder(@NonNull final ViewHolder holder, final int position)
    {
        if(isShow){holder.button.setVisibility(View.GONE);}
    }

holder.likes.setOnClickListener(v -> {
        v.postDelayed(() -> isShow=true,notifyDataSetChanged();},500);

    });
    }

【讨论】:

  • 你能解释更多吗?
  • 我编辑了我的问题。 arraylist.remove 将删除整个列表对吗?我不确定
  • 好的,然后在您的代码中添加 notifyDataChanged();可见性消失后,如果它不起作用,请更新我。
  • 我需要从回收站中的所有项目中删除按钮。 notifyDataChanged() 仅删除我单击按钮的项目
  • 检查我的更新答案,它绝对适合你!!
【解决方案3】:

我认为最好在模型中创建一个布尔字段(传递给recyclerview)并检查它是否为真按钮可见,当它为假时按钮不可见以及当一个项目点击你可以为项目设置此布尔值 false,然后使用 notifyDataSetChanged() 更新所有项目视图

希望对你有帮助(:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2020-07-29
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多