mainactivity布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bw.activity.MainActivity"> <Button android:id="@+id/lsit_rcv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello list" /> <Button android:id="@+id/grid_rcv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/lsit_rcv" android:text="Hello grid" /> <Button android:id="@+id/Sta_rcv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/grid_rcv" android:text="Hello Sta" /> </RelativeLayout>Recyclerviewactivity布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bw.activity.RecyclerviewActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/RecyclerView" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </RelativeLayout>item布局1,2,3一样
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/item1_list" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
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 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); //为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)); } //绑定适配器 mRecyclerView.setAdapter(new RecyclerviewAdapter(this,list)); } }adapter代码逻辑
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; /** * Created by Administrator on 2016/11/19 0019. */ public class RecyclerviewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { LayoutInflater mLayoutInflater; Context context; List<String> list; /** * ① 枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。因为是常量,所以不能对枚举元素进行赋值。 * ② 枚举元素作为常量,它们是有值的,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 */ @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //加载Item View的时候根据不同TYPE加载不同的布局 //枚举的用法 if (viewType==ITEM_TYPE.ITEM1.ordinal()){ return new Item1ViewHolder(mLayoutInflater.inflate(R.layout.item1,parent,false)); }else if (viewType==ITEM_TYPE.ITEM2.ordinal()){ return new Item2ViewHolder(mLayoutInflater.inflate(R.layout.item2,parent,false)); }else{ return new Item3ViewHolder(mLayoutInflater.inflate(R.layout.item3,parent,false)); } } /** *绑定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)); }else if (holder instanceof Item2ViewHolder){ ((Item2ViewHolder)holder).mTextView.setText(list.get(position)); }else if (holder instanceof Item3ViewHolder){ ((Item3ViewHolder)holder).mTextView.setText(list.get(position)); } } /** * 获取数据源的个数 * @return 总条目数 */ @Override public int getItemCount() { return list == null ? 0 : list.size(); } /** * item1的ViewHolder */ public 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 */ public 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 */ public class Item3ViewHolder extends RecyclerView.ViewHolder{ //item中的控件ID TextView mTextView; public Item3ViewHolder(View itemView) { super(itemView); mTextView= (TextView) itemView.findViewById(R.id.item3_sta); } } }