View 布局最初是隐藏的,然后onclick 将使view 可见,反之亦然(Android)

View layout that are initially hidden, then onclick will make view visible, and vice versa(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);
                }
            });

        }
    }

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

试试这个:

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

        }
    }

但我不推荐这种方法,因为如果ViewHolder被回收,它会失去它的visibility状态。您需要保持列表项的可见性。

尝试进行调节并检查在单击按钮时视图是否可见或消失

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