Сделать View Visible или Унесенные в адаптер на ClickListener - PullRequest
0 голосов
/ 13 февраля 2020

Я показываю представление переработчика в моем приложении, и я хочу, чтобы, когда пользователь щелкает по элементу просмотра переработчика, ему было видно скрытое представление, а при щелчке элемента назад оно исчезало. Мой код:

 holder.parentView.setOnClickListener(v -> {
                    if (viewVisibiltyCheck) {
                        holder.expandView.setVisibility(View.VISIBLE);
                        viewVisibiltyCheck = false;
                    } else {
                        viewVisibiltyCheck = true;
                        holder.expandView.setVisibility(View.GONE);
                    }

                });

Iam с использованием Firebase Recycler. У меня есть логическая проверка, которая заключается в том, что когда истинное представление становится видимым для каждого элемента в списке, который я нажимаю, и делаю логическое значение false. Теперь, если я нажимаю на тот же элемент он будет работать нормально и скрывать вид, но если я нажму на любой другой элемент в списке с видимым первым видом, мне придется дважды щелкнуть элемент, потому что при первом щелчке он будет иметь логическое значение true, так как становится ложным, когда я нажимаю на первый список предметов и затем при втором щелчке он покажет мне вид.

Есть ли лог c Я могу сделать все одним щелчком мыши? Thanku

Ответы [ 2 ]

3 голосов
/ 13 февраля 2020

Вам вообще не нужен этот viewVisibilityCheck.

holder.parentView.setOnClickListener(v -> {
                    if (holder.expandView.getVisibility() == View.GONE) {
                        holder.expandView.setVisibility(View.VISIBLE);
                    } else {
                        holder.expandView.setVisibility(View.GONE);
                    }
            });
1 голос
/ 13 февраля 2020

Если я правильно понимаю, ваша проблема в том, что значение viewVisibiltyCheck не связано с тем элементом, который вы щелкаете Если это так, просто установите viewVisibiltyCheck как свойство holder, так что вы получите к нему доступ так же, как и expandView.

Так что-то вроде этого может быть:

holder.parentView.setOnClickListener(v -> {
                    if (holder.viewVisibiltyCheck) {
                        holder.expandView.setVisibility(View.VISIBLE);
                        holder.viewVisibiltyCheck = false;
                    } else {
                        holder.viewVisibiltyCheck = true;
                        holder.expandView.setVisibility(View.GONE);
                    }

                });

РЕДАКТИРОВАТЬ: Вы должны поместить его туда, где вы создаете держатель и его виды, как, например, expandView. Таким образом, вы можете связать различные параметры с представлением, но Брюс отвечает, что в вашем случае это проще, вероятно.

public class MyViewHolder extends RecyclerView.ViewHolder {
    View expandView;
    boolean viewVisibiltyCheck;

    public MyViewHolder(View itemView) {
        super(itemView);
         /* your code */
        viewVisibiltyCheck = false;
    }
...