Recyclerview

Recyclerview

1.Recyclerview比listview的优势:

2.Recyclerview支持多布局

3.RecycleView根据需要的插架

1.代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rv">
    </android.support.v7.widget.RecyclerView>

</LinearLayout>
package com.example.administrator.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
//MainAtivity代码
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    private RecyclerView rv;
    private ArrayList<student> list=new ArrayList<>();
    private MainApter mainApter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv=findViewById(R.id.rv);
        list.add(new student(R.mipmap.cc2,"见风使舵"));
        list.add(new student(R.mipmap.aaaa1,"二恶烷"));
        list.add(new student(R.mipmap.cc1,"最幸福"));
        list.add(new student(R.mipmap.xx1,"一会卡洛斯"));
        list.add(new student(R.mipmap.cc2,"见风使舵"));
        list.add(new student(R.mipmap.aaaa1,"二恶烷"));
        list.add(new student(R.mipmap.cc1,"最幸福"));
        list.add(new student(R.mipmap.xx1,"一会卡洛斯"));
        list.add(new student(R.mipmap.cc2,"见风使舵"));
        list.add(new student(R.mipmap.aaaa1,"二恶烷"));
        list.add(new student(R.mipmap.cc1,"最幸福"));
        list.add(new student(R.mipmap.xx1,"一会卡洛斯"));
        list.add(new student(R.mipmap.cc2,"见风使舵"));
        list.add(new student(R.mipmap.aaaa1,"二恶烷"));
        list.add(new student(R.mipmap.cc1,"最幸福"));
        list.add(new student(R.mipmap.xx1,"一会卡洛斯"));
        list.add(new student(R.mipmap.cc2,"见风使舵"));
        list.add(new student(R.mipmap.aaaa1,"二恶烷"));
        list.add(new student(R.mipmap.cc1,"最幸福"));
        list.add(new student(R.mipmap.xx1,"一会卡洛斯"));
        list.add(new student(R.mipmap.cc2,"见风使舵"));
        list.add(new student(R.mipmap.aaaa1,"二恶烷"));
        list.add(new student(R.mipmap.cc1,"最幸福"));
        list.add(new student(R.mipmap.xx1,"一会卡洛斯"));

        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(MainActivity.this);
        GridLayoutManager gridLayoutManager=new GridLayoutManager(MainActivity.this,2);
        StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        rv.setLayoutManager(staggeredGridLayoutManager);

        DefaultItemAnimator defaultItemAnimator=new DefaultItemAnimator();
        defaultItemAnimator.setRemoveDuration(2000);
        defaultItemAnimator.setAddDuration(2000);
        rv.setItemAnimator(defaultItemAnimator);

        DividerItemDecoration dividerItemDecoration=new DividerItemDecoration(MainActivity.this,DividerItemDecoration.VERTICAL);
        rv.addItemDecoration(dividerItemDecoration);

        mainApter=new MainApter(list,MainActivity.this);
        rv.setAdapter(mainApter);
    }
}

//适配器代码:

package com.example.administrator.myapplication;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainApter extends RecyclerView.Adapter<MainApter.MainViewHolder>  {
    private ArrayList<student> list;
    private Context context;


    public MainApter(ArrayList<student> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @NonNull
    @Override
    public MainViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view= LayoutInflater.from(context).inflate(R.layout.item1,null);
        return new MainViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final MainViewHolder mainViewHolder, final int i) {
      mainViewHolder.iv.setImageResource(list.get(i).getSrc());
      mainViewHolder.tv.setText(list.get(i).getTitle());
      mainViewHolder.iv.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Toast.makeText(context, "被点击了", Toast.LENGTH_SHORT).show();
              list.remove(i);
              notifyItemRemoved(i);
              notifyItemChanged(0,list.size());
          }
      });
//      mainViewHolder.iv.setOnTouchListener(new View.OnTouchListener() {
//          @Override
//          public boolean onTouch(View v, MotionEvent event) {
//              Toast.makeText(context, "被点击了", Toast.LENGTH_SHORT).show();
//              return true;
//          }
//      });
    }

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

    class MainViewHolder extends RecyclerView.ViewHolder{
        private ImageView iv;
        private TextView tv;
        public MainViewHolder(@NonNull View itemView) {
            super(itemView);
            this.iv=itemView.findViewById(R.id.iv);
            this.tv=itemView.findViewById(R.id.tv);
            ViewGroup.LayoutParams layoutParams=iv.getLayoutParams();
            layoutParams.height=(int)(Math.random()*200+300);
            iv.setLayoutParams(layoutParams);
        }
    }
}
//实体类:
package com.example.administrator.myapplication;

public class student {
    private int src;
    private String title;

    public student(int src, String title) {
        this.src = src;
        this.title = title;
    }

    public int getSrc() {
        return src;
    }

    public String getTitle() {
        return title;
    }

    public void setSrc(int src) {
        this.src = src;
    }

    @Override
    public String toString() {
        return "student{" +
                "src=" + src +
                ", title='" + title + '\'' +
                '}';
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

**效果图:

********多布局

  • RecyclerView.ViewHolder:由于进行多布局操作
  • 需要多个ViewHolder对象对应过个xml布局
  • 自定义ViewHolder父类
  • //Main2Ativity代码
  • <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:orientation="vertical">
        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/rv">
        </android.support.v7.widget.RecyclerView>
    
    </LinearLayout>
  • package com.example.administrator.myapplication.day1859;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.DividerItemDecoration;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    
    import com.example.administrator.myapplication.R;
    
    import java.util.ArrayList;
    
    public class Main2Activity extends AppCompatActivity {
        RecyclerView recyclerView;
        PhoneAdapter adapter;
        ArrayList<PhoneBean> list=new ArrayList<>();
        String lable="";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            recyclerView=findViewById(R.id.rv);
            list.add(new PhoneBean(0,"","","A"));
            list.add(new PhoneBean(1,"安然","123456789",""));
            list.add(new PhoneBean(1,"安塞","123456789",""));
            list.add(new PhoneBean(0,"","","B"));
            list.add(new PhoneBean(1,"碧玺","123456789",""));
            list.add(new PhoneBean(1,"毕福建","123456789",""));
            list.add(new PhoneBean(0,"","","C"));
            list.add(new PhoneBean(1,"程琳","123456789",""));
            list.add(new PhoneBean(1,"陈龙","123456789",""));
            list.add(new PhoneBean(0,"","","D"));
            list.add(new PhoneBean(1,"典型","123456789",""));
            list.add(new PhoneBean(1,"点心","123456789",""));
            list.add(new PhoneBean(0,"","","E"));
            list.add(new PhoneBean(1,"恩师","123456789",""));
            list.add(new PhoneBean(1,"恩济","123456789",""));
            list.add(new PhoneBean(0,"","","F"));
            list.add(new PhoneBean(1,"发丝","123456789",""));
            list.add(new PhoneBean(1,"法师","123456789",""));
            list.add(new PhoneBean(0,"","","G"));
            list.add(new PhoneBean(1,"革新","123456789",""));
            list.add(new PhoneBean(1,"格力","123456789",""));
            list.add(new PhoneBean(0,"","","H"));
            list.add(new PhoneBean(1,"韩式","123456789",""));
            list.add(new PhoneBean(1,"汉武","123456789",""));
            list.add(new PhoneBean(0,"","","I"));
            list.add(new PhoneBean(1,"秀秀","123456789",""));
            list.add(new PhoneBean(1,"希希","123456789",""));
            list.add(new PhoneBean(0,"","","J"));
            list.add(new PhoneBean(1,"杰杰","123456789",""));
            list.add(new PhoneBean(1,"捷龙","123456789",""));
            list.add(new PhoneBean(0,"","","K"));
            list.add(new PhoneBean(1,"可可","123456789",""));
            list.add(new PhoneBean(1,"硁硁","123456789",""));
            list.add(new PhoneBean(0,"","","L"));
            list.add(new PhoneBean(1,"丽丽","123456789",""));
            list.add(new PhoneBean(1,"玲玲","123456789",""));
            list.add(new PhoneBean(0,"","","M"));
            list.add(new PhoneBean(1,"芒芒","123456789",""));
            list.add(new PhoneBean(1,"萌萌","123456789",""));
            list.add(new PhoneBean(0,"","","N"));
            list.add(new PhoneBean(1,"男男","123456789",""));
            list.add(new PhoneBean(1,"南利","123456789",""));
            list.add(new PhoneBean(0,"","","O"));
            list.add(new PhoneBean(1,"opop","123456789",""));
            list.add(new PhoneBean(1,"偶遇","123456789",""));
            list.add(new PhoneBean(0,"","","P"));
            list.add(new PhoneBean(1,"彭丽","123456789",""));
            list.add(new PhoneBean(1,"鹏鹏","123456789",""));
            list.add(new PhoneBean(0,"","","Q"));
            list.add(new PhoneBean(1,"凄凄","123456789",""));
            list.add(new PhoneBean(1,"启迪","123456789",""));
            list.add(new PhoneBean(0,"","","R"));
            list.add(new PhoneBean(1,"日报","123456789",""));
            list.add(new PhoneBean(1,"日寇","123456789",""));
            list.add(new PhoneBean(0,"","","S"));
            list.add(new PhoneBean(1,"时刻","123456789",""));
            list.add(new PhoneBean(1,"时空","123456789",""));
            list.add(new PhoneBean(0,"","","T"));
            list.add(new PhoneBean(1,"田丽","123456789",""));
            list.add(new PhoneBean(1,"天武","123456789",""));
            list.add(new PhoneBean(0,"","","U"));
            list.add(new PhoneBean(1,"uu","123456789",""));
            list.add(new PhoneBean(1,"勎","123456789",""));
            list.add(new PhoneBean(0,"","","V"));
            list.add(new PhoneBean(1,"vein","123456789",""));
            list.add(new PhoneBean(1,"vovo","123456789",""));
            list.add(new PhoneBean(0,"","","W"));
            list.add(new PhoneBean(1,"悟空","123456789",""));
            list.add(new PhoneBean(1,"无极","123456789",""));
            list.add(new PhoneBean(0,"","","X"));
            list.add(new PhoneBean(1,"晓晓","123456789",""));
            list.add(new PhoneBean(1,"小明","123456789",""));
            list.add(new PhoneBean(0,"","","Y"));
            list.add(new PhoneBean(1,"杨艳","123456789",""));
            list.add(new PhoneBean(1,"阳历","123456789",""));
            list.add(new PhoneBean(0,"","","Z"));
            list.add(new PhoneBean(1,"曾丽","123456789",""));
            list.add(new PhoneBean(1,"曾小贤","123456789",""));
    
    
            adapter=new PhoneAdapter(list,Main2Activity.this);
            recyclerView.setAdapter(adapter);
            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
            recyclerView.setLayoutManager(linearLayoutManager);
            DividerItemDecoration dividerItemDecoration=new DividerItemDecoration(Main2Activity.this,DividerItemDecoration.VERTICAL);
            recyclerView.addItemDecoration(dividerItemDecoration);
            linearLayoutManager.scrollToPositionWithOffset(2,0);
        }
    }
    
  • //适配器代码:
  • package com.example.administrator.myapplication.day1859;
    
    import android.content.Context;
    import android.support.annotation.NonNull;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import com.example.administrator.myapplication.R;
    
    import java.util.ArrayList;
    
    public class PhoneAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
        ArrayList<PhoneBean> list=new ArrayList<>();
        Context context;
    
        public PhoneAdapter(ArrayList<PhoneBean> list, Context context) {
            this.list = list;
            this.context = context;
        }
    
        @Override
        public int getItemViewType(int position) {
            return list.get(position).getType();
        }
    
        @NonNull
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            if (i==0){
                return  new TitleViewHolder(LayoutInflater.from(context).inflate(R.layout.item2,viewGroup,false));
            }else{
               return  new PhoneViewHolder(LayoutInflater.from(context).inflate(R.layout.item3,viewGroup,false));
            }
    
        }
    
        @Override
        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
      if (getItemViewType(i)==0){
          TitleViewHolder titleViewHolder= (TitleViewHolder) viewHolder;
          titleViewHolder.tv_title.setText(list.get(i).getTitle()+"");
      }else{
          PhoneViewHolder phoneViewHolder= (PhoneViewHolder) viewHolder;
          phoneViewHolder.tv_number.setText(list.get(i).getNumber());
          phoneViewHolder.tv_name.setText(list.get(i).getName());
      }
        }
    
        @Override
        public int getItemCount() {
            return list.size();
        }
    
        class TitleViewHolder extends  RecyclerView.ViewHolder{
    TextView tv_title;
            public TitleViewHolder(@NonNull View itemView) {
                super(itemView);
                tv_title=itemView.findViewById(R.id.tv_title);
            }
        }
        class PhoneViewHolder extends RecyclerView.ViewHolder{
      TextView tv_name;
      TextView tv_number;
            public PhoneViewHolder(@NonNull View itemView) {
                super(itemView);
                tv_name=itemView.findViewById(R.id.tv_name);
                tv_number=itemView.findViewById(R.id.tv_number);
    
            }
        }
    
    }
    
  • //实体类
  • package com.example.administrator.myapplication.day1859;
    
    public class PhoneBean {
        int type;
        String name;
        String number;
        String title;
    
        public PhoneBean(int type, String name, String number, String title) {
            this.type = type;
            this.name = name;
            this.number = number;
            this.title = title;
        }
    
        public int getType() {
            return type;
        }
    
        public String getName() {
            return name;
        }
    
        public String getNumber() {
            return number;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setType(int type) {
            this.type = type;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setNumber(String number) {
            this.number = number;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        @Override
        public String toString() {
            return "PhoneBean{" +
                    "type=" + type +
                    ", name='" + name + '\'' +
                    ", number='" + number + '\'' +
                    ", title='" + title + '\'' +
                    '}';
        }
    }
    
  • //效果图

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值