展开折叠回收器视图中的布局

时间:2017-12-27 08:26:32

标签: android android-recyclerview

我有一个回收站视图,它在开始时具有header元素和子元素,子元素的可见性消失了。我希望当我点击标题元素时假设该位置的零位子元素应该是可见的(平均展开)我成功实现了这一点。我面临的唯一问题是,当我再次点击相同的位置时,我想要折叠相同的视图。

我的回收视图onBingViewHolder逻辑如下: -

holder.doc_type.setText(docDatalist.get(position).getDocTypeDesc());

    if (position == expandedPosition )
    {
            holder.recyclerViewImages.setVisibility(View.VISIBLE);
            imagerequestserver(docDatalist.get(expandedPosition), vinappserial, holder);
            holder.iconexpandCollapse.setImageResource(R.mipmap.expand_4);
        }


     else {
        holder.recyclerViewImages.setVisibility(View.GONE);
        holder.iconexpandCollapse.setImageResource(R.mipmap.expand);

    }
    holder.myDocumentListCollapse.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View view) {



            if (expandedPosition >= 0) {

                    int prev = expandedPosition;
                    holder.recyclerViewImages.setVisibility(View.VISIBLE);
                notifyItemChanged(prev);

            }else {
                expandedPosition = holder.getAdapterPosition();
                notifyItemChanged(expandedPosition);
            }
        }

    });

先谢谢。

1 个答案:

答案 0 :(得分:0)

您需要手动添加已点击的位置数组,然后在viewHolder中检查其位置后;

在构造函数中提供折叠位置列表

positionSet = new ArrayList<>();

在标题点击侦听器点击事件中添加和删除适当的位置:

 public void onClick(View view) {


                int position = getAdapterPosition();
                if(positionSet.contains(position)){

                    positionSet.remove((Integer)position);
                }else {
                    positionSet.add(position);
                }
                notifyDataSetChanged();
            }
        }

管理以在onBindViewHolder中通知

 if(positionSet.contains(position)){
        //visible
    }else {
        //gone
    }