MainActivity
类package com.bw.activity; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //listview findViewById(R.id.lsit_rcv).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //跳转页面 Intent intent=new Intent(MainActivity.this,RecyclerviewActivity.class); //intent携带值 intent.putExtra("type",1); //跳转 startActivity(intent); } }); //gridview findViewById(R.id.grid_rcv).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,RecyclerviewActivity.class); intent.putExtra("type",2); startActivity(intent); } }); //瀑布流 findViewById(R.id.Sta_rcv).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(MainActivity.this,RecyclerviewActivity.class); intent.putExtra("type",3); startActivity(intent); } }); } }
RecyclerviewActivity类
package com.bw.activity; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.View; import android.widget.Toast; import com.bw.adapter.RecyclerviewAdapter; import java.util.ArrayList; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; public class RecyclerviewActivity extends AppCompatActivity { @Bind(R.id.RecyclerView) RecyclerView mRecyclerView; List<String> list=new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recyclerview); ButterKnife.bind(this); //为list集合添加数据 for (int i=0;i<20;i++){ list.add("满心好事"+i); } //判断mainactivity传来值,设置mRecyclerView的布局管理器 if (getIntent().getIntExtra("type",0)==1){ /**RecyclerView提供了三种内置的LayoutManager: * LinearLayoutManager:线性布局,横向或者纵向滑动列表 * GridLayoutManager:表格布局,支持水平和垂直效果 * StaggeredGridLayoutManager:流式布局 */ //线性布局管理器,参数是本activity的对象 LinearLayoutManager mLayoutManager=new LinearLayoutManager(this); //设置线性布局的方向(Orientation:方向) // 参数:LinearLayoutManager.VERTICAL(垂直)或HORIZONTAL(水平) mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); //这个方法可写可不写setHasFixedSize(true) //如果可以确定每个item的高度是固定的,设置这个选项可以提高性能 mRecyclerView.setHasFixedSize(true); //为Recycleview设置线性布局管理器 mRecyclerView.setLayoutManager(mLayoutManager); }else if (getIntent().getIntExtra("type",0)==2){ //为Recycleview设置表格布局管理器 //参数1:本activity的对象,参数2:表格布局的列数 mRecyclerView.setLayoutManager(new GridLayoutManager(this,2)); }else if (getIntent().getIntExtra("type",0)==3){ //参数1:列数,参数2:VERTICAL(垂直)或HORIZONTAL(水平)等 mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)); } RecyclerviewAdapter mAdapter=new RecyclerviewAdapter(this,list); //绑定适配器 mRecyclerView.setAdapter(mAdapter); //设置点击事件 mAdapter.setOnItemClickListener(new RecyclerviewAdapter.OnRecyclerViewItemClickListener() { @Override public void onItemClick(View view, String data) { Toast.makeText(RecyclerviewActivity.this, data, Toast.LENGTH_SHORT).show(); } }); //设置长按点击事件 mAdapter.setOnItemLongClickListener(new RecyclerviewAdapter.MyItemLongClickListener() { @Override public void onItemLongClick(View view, String data) { Toast.makeText(RecyclerviewActivity.this, data, Toast.LENGTH_SHORT).show(); } }); } }
RecyclerviewAdapter类
package com.bw.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.bw.activity.R; import java.util.List; /** * 实现条目点击事件:实现了点击接口 */ public class RecyclerviewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener,View.OnLongClickListener{ LayoutInflater mLayoutInflater; Context context; List<String> list; //自定义内部接口的对象(点击) private OnRecyclerViewItemClickListener mOnItemClickListener = null; //自定义内部接口的对象(长按点击) private MyItemLongClickListener mLongClickListener=null; /** * 点击接口回调 */ //实现条目点击事件用的方法 //define(定义) interface(接口) public static interface OnRecyclerViewItemClickListener { //两个参数可改(自定义) void onItemClick(View view , String data); } //提供的对外调用setOnItemClickListener的方法,参数是内部接口 public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { this.mOnItemClickListener = listener; } //点击方法(实现的是实现的接口的抽象方法) //点击的实现靠它,因为它是实现的点击方法 @Override public void onClick(View v) { if (mOnItemClickListener != null) { //(内部点击接口)注意这里使用getTag方法获取数据 //参数对应内部点击接口参数一致 mOnItemClickListener.onItemClick(v,(String)v.getTag()); } } /** * 长按点击接口回调 */ //长按监听 @Override public boolean onLongClick(View v) { if(mLongClickListener != null){ mLongClickListener.onItemLongClick(v, (String)v.getTag()); } return true; } //长按接口 public interface MyItemLongClickListener { void onItemLongClick(View view,String data); } //对外的调用长按点击的方法 public void setOnItemLongClickListener(MyItemLongClickListener listener){ this.mLongClickListener = listener; } /** * ① 枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。因为是常量,所以不能对枚举元素进行赋值。 * ② 枚举元素作为常量,它们是有值的,C 语言在编译时按定义的顺序使它们的值为,1,2,…。 * enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat}day; * 这时,sun 为 7,mon 为 1,以后元素顺次加 1,所以 sat 就是 6 了。 */ //建立枚举 2个item 类型(里面的) public enum ITEM_TYPE { ITEM1, ITEM2, ITEM3 } //有参实例化 public RecyclerviewAdapter(Context context, List<String> list) { this.context=context; this.list=list; //实例化LayoutInflater mLayoutInflater=LayoutInflater.from(context); } /** *该方法中导入布局,实例化VIewHolder * @param parent 相当于一个容器 * @param viewType 第二个参数就是View的类型,可以根据这个类型判断去创建不同item的ViewHolder。 * @return ViewHolder对象 */ @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //枚举的用法 if (viewType==ITEM_TYPE.ITEM1.ordinal()){ //加载Item View的时候根据不同TYPE加载不同的布局 View view=mLayoutInflater.inflate(R.layout.item1,parent,false); //实例化Item1ViewHolder Item1ViewHolder vh=new Item1ViewHolder(view); //将创建的View注册点击事件 // (因为view代表的是条目布局,它是一个条目,为它注册了点击监听, // 在它被加载后就是每一个条目都有了监听) view.setOnClickListener(this); //将创建的View注册长按点击事件(就Item1ViewHolder注册了) view.setOnLongClickListener(this); return vh; }else if (viewType==ITEM_TYPE.ITEM2.ordinal()){ //加载Item View的时候根据不同TYPE加载不同的布局 View view=mLayoutInflater.inflate(R.layout.item2,parent,false); //实例化Item1ViewHolder Item2ViewHolder vh=new Item2ViewHolder(view); //将创建的View注册点击事件 view.setOnClickListener(this); return vh; }else{ //加载Item View的时候根据不同TYPE加载不同的布局 View view=mLayoutInflater.inflate(R.layout.item3,parent,false); //实例化Item1ViewHolder Item3ViewHolder vh=new Item3ViewHolder(view); //将创建的View注册点击事件 view.setOnClickListener(this); return vh; } } /** *绑定VIewHolder,加载数据 * @param holder * @param position */ @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof Item1ViewHolder){ ((Item1ViewHolder) holder).mTextView.setText(list.get(position)); //将数据保存在itemView的Tag中,以便点击时进行获取 holder.itemView.setTag(list.get(position)); }else if (holder instanceof Item2ViewHolder){ ((Item2ViewHolder)holder).mTextView.setText(list.get(position)); //将数据保存在itemView的Tag中,以便点击时进行获取 holder.itemView.setTag(list.get(position)); }else if (holder instanceof Item3ViewHolder){ ((Item3ViewHolder)holder).mTextView.setText(list.get(position)); //将数据保存在itemView的Tag中,以便点击时进行获取 holder.itemView.setTag(list.get(position)); } } /** * 获取数据源的个数 * @return 总条目数 */ @Override public int getItemCount(){ //返回list.size()也可以 return list == null ? 0 : list.size(); } /** * item1的ViewHolder * 自定义的ViewHolder,持有每个Item的的所有界面元素 */ public static class Item1ViewHolder extends RecyclerView.ViewHolder{ //item中的控件ID TextView mTextView; public Item1ViewHolder(View itemView) { super(itemView); mTextView= (TextView) itemView.findViewById(R.id.item1_list); } } /** * item2的ViewHolder * 自定义的ViewHolder,持有每个Item的的所有界面元素 */ public static class Item2ViewHolder extends RecyclerView.ViewHolder{ //item中的控件ID TextView mTextView; public Item2ViewHolder(View itemView) { super(itemView); mTextView= (TextView) itemView.findViewById(R.id.item2_grid); } } /** * item3的ViewHolder * 自定义的ViewHolder,持有每个Item的的所有界面元素 */ public static class Item3ViewHolder extends RecyclerView.ViewHolder{ //item中的控件ID TextView mTextView; public Item3ViewHolder(View itemView) { super(itemView); mTextView= (TextView) itemView.findViewById(R.id.item3_sta); } } }