Как удалить кнопку / вид из всех элементов в RecyclerView? - PullRequest
1 голос
/ 02 ноября 2019

У меня есть базовый горизонтальный просмотрщик с кнопками во всех элементах. Когда пользователь нажимает кнопку в любом из элементов, я хочу, чтобы кнопка была удалена или видимость исчезла из всех элементов в 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);

    }

}

Ответы [ 3 ]

2 голосов
/ 02 ноября 2019

Попробуйте

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);

    }
}

Это идеальный ответ на ваш вопрос.

Надеюсь, это может помочь Вам!

Спасибо.

1 голос
/ 02 ноября 2019
    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);

    });
    }
0 голосов
/ 02 ноября 2019

я думаю, что лучше сделать логическое поле в вашей модели (которое вы передали в просмотрщик) и проверить, было ли это верно, кнопка была видимой, а когда она была ложной, кнопка была невидимой, и когда элемент нажимал васможет сделать это логическое значение false для элементов, а затем с помощью notifyDataSetChanged () обновить все элементы.

Надеюсь, это поможет вам (:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...