Просмотр макета, который изначально скрыт, затем onclick сделает вид видимым, и наоборот (Android)

#android #android-studio #android-recyclerview #visibility

#Android #android-studio #android-recyclerview #видимость

Вопрос:

У меня есть ограничение видимости макета, для которого изначально установлено значение GONE expandableLayout.setVisibility(View.GONE); . Я хочу, чтобы представление было видимым при выдаче setOnClickListener. Затем, когда пользователь снова нажмет на макет, для представления снова будет установлено значение «Нет».

 public class ViewHolder extends RecyclerView.ViewHolder {
        TextView mThicc;
        ListView listView;
        ConstraintLayout expandableLayout;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            mThicc = itemView.findViewById(R.id.thicc);
            listView = itemView.findViewById(R.id.stocklist);
            expandableLayout = itemView.findViewById(R.id.expandableLayout);

            expandableLayout.setVisibility(View.GONE);
            
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    expandableLayout.setVisibility(View.GONE);
                }
            });

        }
    }
  

Проблема в том, что когда я щелкнул по макету, он не останется скрытым.

Ответ №1:

Попробуйте это:

 public class ViewHolder extends RecyclerView.ViewHolder {     
        TextView mThicc;
        ListView listView;
        ConstraintLayout expandableLayout;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            mThicc = itemView.findViewById(R.id.thicc);
            listView = itemView.findViewById(R.id.stocklist);
            expandableLayout = itemView.findViewById(R.id.expandableLayout);

            expandableLayout.setVisibility(View.GONE);
            
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int visibility =  expandableLayout.getVisibility() == View.GONE ? View.VISIBLE : View.GONE;
                    expandableLayout.setVisibility(visibility);
                }
            });

        }
    }
  

Но я не рекомендую этот метод, потому что он потеряет свое visibility состояние, если ViewHolder будет переработан. Вам необходимо сохранить видимость элемента списка.

Ответ №2:

Попробуйте выполнить кондиционирование и проверить, виден ли вид или нет, как это делается при нажатии кнопки

 if(expandableLayout.getVisibility==View.GONE){
    expandableLayout.setVisibility(View.VISIBLE);
}
 else {
    expandableLayout.setVisibility(View.GONE); 
}
  

Комментарии:

1. это очень помогает. Поскольку я извлекаю данные из firebase, мне просто нужно вызвать «notifyItemChanged (getAdapterPosition ())», и это работает как шарм