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 + '\'' + '}'; } }
- //效果图