RecyclerView实现手风琴效果

这里写图片描述
public class MainActivity extends AppCompatActivity {

private RecyclerView rc;
private  List<Data> list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setData();

    rc= (RecyclerView) findViewById(R.id.rc);

    LinearLayoutManager manager=new LinearLayoutManager(this);
    MyAdapter adapter=new MyAdapter(this,list,rc);
    rc.setLayoutManager(manager);
    rc.setAdapter(adapter);
}

public void setData(){
    list=new ArrayList<Data>();
    for(int i=0;i<30;i++){
        Data data=new Data();
        list.add(data);
    }
    for(int j=0;j<3;j++){
        Data data=list.get(j);
        data.setTag("第一组");
        data.setContent("111111");
    }
    for(int j=3;j<6;j++){
        Data data=list.get(j);
        data.setTag("第二组");
        data.setContent("222222");
    }
    for(int j=6;j<9;j++){
        Data data=list.get(j);
        data.setTag("第三组");
        data.setContent("3333");
    }
    for(int j=9;j<12;j++){
        Data data=list.get(j);
        data.setTag("第四组");
        data.setContent("444444");
    }
    for(int j=12;j<15;j++){
        Data data=list.get(j);
        data.setTag("第五组");
        data.setContent("55555");
    }
    for(int j=15;j<18;j++){
        Data data=list.get(j);
        data.setTag("第六组");
        data.setContent("66666");
    }
    for(int j=18;j<21;j++){
        Data data=list.get(j);
        data.setTag("第七组");
        data.setContent("77777");
    }
    for(int j=21;j<24;j++){
        Data data=list.get(j);
        data.setTag("第八组");
        data.setContent("88888");
    }
    for(int j=24;j<27;j++){
        Data data=list.get(j);
        data.setTag("第九组");
        data.setContent("99999");
    }
    for(int j=27;j<30;j++){
        Data data=list.get(j);
        data.setTag("第十组");
        data.setContent("0000000");
    }


}

class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHodler>{
    private RecyclerView rc;
    private Context context;
    private List<Data> list;
    private int title_type=0;
    private int content_type=1;
    public MyAdapter(Context context,List<Data> list,RecyclerView rc){
        this.context=context;
        this.list=list;
        this.rc=rc;


    }
    @Override
    public int getItemViewType(int position) {
        Data oldC = null;
        if (position > 0) {
            oldC = list.get(position - 1);
        }
        Data shopC = list.get(position);
        if (oldC != null) {
            if (shopC.getTag().equals(oldC.getTag())) {
                return content_type;
            } else {
                return title_type;
            }
        } else {
            return title_type;
        }
    }
    @Override
    public MyHodler onCreateViewHolder(ViewGroup parent, int viewType) {
        View v= LayoutInflater.from(context).inflate(R.layout.layout_item,parent,false);
        MyHodler hodler=new MyHodler(v);


        return hodler;
    }

    @Override
        public void onBindViewHolder(final MyHodler holder, final int position) {

        //item 是否显示标题
       final int type=getItemViewType(position);
        if(type==0){//显示标题
            holder.layout.setVisibility(View.VISIBLE);

        }else{//不显示标题

            holder.layout.setVisibility(View.GONE);
        }
        //判断item是否需要显示
        if(list.get(position).getIsShow()==true){
            holder.tvContent.setVisibility(View.VISIBLE);

        }else{
            holder.tvContent.setVisibility(View.GONE);
        }
        holder.tvTitle.setText(list.get(position).getTag());
        holder.tvContent.setText(list.get(position).getContent());


        holder.bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String tag=list.get(position).getTag();
                for(int i=position;i<list.size();i++){
                    if(!list.get(i).getTag().equals(tag))
                        return;

                    MyAdapter.MyHodler holder= (MyHodler) rc.findViewHolderForAdapterPosition(i);

                    if(list.get(i).getIsShow()){
                        list.get(i).setIsShow(false);
                        if(holder!=null)
                        holder.tvContent.setVisibility(View.GONE);
                    }else {
                        list.get(i).setIsShow(true);
                        if (holder != null)
                        holder.tvContent.setVisibility(View.VISIBLE);

                    }
                }

            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    class MyHodler extends  RecyclerView.ViewHolder{

        public TextView tvTitle,tvContent;
        public Button bt;
        public LinearLayout layout;

        public MyHodler(View itemView) {
            super(itemView);
            tvTitle= (TextView) itemView.findViewById(R.id.title);
            bt= (Button) itemView.findViewById(R.id.bt);
            tvContent= (TextView) itemView.findViewById(R.id.tv_content);
            layout= (LinearLayout) itemView.findViewById(R.id.layout);
        }
    }
}

}

“`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值