首页 > 解决方案 > 最初隐藏的视图布局,然后 onclick 将使视图可见,反之亦然(Android)

问题描述

我有一个最初设置为 GONE 的约束布局可见性expandableLayout.setVisibility(View.GONE);。我想让视图在发出“setOnClickListener”时可见。然后,当用户再次单击布局时,视图将设置为 Gone Again。

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

        }
    }

问题是,当我点击布局时,它不会保持隐藏状态。

标签: androidandroid-studioandroid-recyclerviewvisibility

解决方案


试试这个:

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 被回收,它会失去它的状态。您需要保持列表项的可见性。


推荐阅读