#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 ())», и это работает как шарм