RecyclerView的使用步骤
(1)、 导包 'com.android.support:recyclerview-v7:22.1.1'
注:要导recycleview相对应的包,只导v7包会报错
(2)、定义主布局activity_main.xml
(3)定义适配器ListAdapter、数据集DataBean、子布局item_list.xml<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=".MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
1>ListAdapter.java 注:自己添加了item的点击事件
2>子布局item_list.xmlpackage com.example.liyongjian.myrecyclerviewdemo; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import java.util.List; /** * Created by liyongjian on 2016/4/3. */ public class ListAdapter extends RecyclerView.Adapter<ListAdapter.MyHolder> { private Context context; private List<DataBean> datas; private OnItemClickListener onItemClickListener; public ListAdapter(Context context, List<DataBean> datas) { this.context = context; this.datas = datas; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = View.inflate(context,R.layout.item_list,null); return new MyHolder(itemView); } @Override public void onBindViewHolder(MyHolder holder, final int position) { holder.setDataAndRefreshUI(datas.get(position)); holder.view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(onItemClickListener != null){ onItemClickListener.onClick(v,position); } } }); } @Override public int getItemCount() { if(datas !=null){ return datas.size(); } return 0; } public class MyHolder extends RecyclerView.ViewHolder{ private TextView mTvName; private ImageView mIvIcon; private View view; public MyHolder(View itemView) { super(itemView); view = itemView; mTvName = (TextView) itemView.findViewById(R.id.tv_name); mIvIcon = (ImageView) itemView.findViewById(R.id.iv_icon); } public void setDataAndRefreshUI(DataBean dataBean){ mTvName.setText(dataBean.getText()); mIvIcon.setImageResource(dataBean.getIconId()); } } public void setOnItemClickListener(OnItemClickListener l){ this.onItemClickListener = l; } public interface OnItemClickListener { public void onClick(View parent, int position); } }
注:嵌套了CardView
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="8dp"> <ImageView android:id="@+id/iv_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_centerVertical="true" android:layout_margin="10dp" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/tv_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@+id/iv_icon" android:text="Name"/> </RelativeLayout> </android.support.v7.widget.CardView> </FrameLayout>
3>数据集DataBean
package com.example.liyongjian.myrecyclerviewdemo; /** * Created by liyongjian on 2016/4/3. */ public class DataBean { private String text; private int iconId; public String getText() { return text; } public void setText(String text) { this.text = text; } public int getIconId() { return iconId; } public void setIconId(int iconId) { this.iconId = iconId; } @Override public String toString() { return "DataBean{" + "text='" + text + '\'' + ", iconId=" + iconId + '}'; } }
(4)MainActivity的实现
注:菜单项可以切换RecyclerView;(1.横向ListView;2.纵向滑动ListView;3横向滑动GridView;4.纵向滑动GridView)
瀑布流以后实现package com.example.liyongjian.myrecyclerviewdemo; import android.app.Activity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import java.util.ArrayList; import java.util.List; //http://www.bkjia.com/Androidjc/988765.html public class MainActivity extends Activity { private RecyclerView mRecyclerView; private List<DataBean> mData = new ArrayList<DataBean>(); private int[] mListIcons = new int[]{R.mipmap.g1, R.mipmap.g2, R.mipmap.g3, R.mipmap.g4, R.mipmap.g5, R.mipmap.g6, R.mipmap.g7, R.mipmap.g8, R.mipmap.g9, R.mipmap.g10, R .mipmap.g11, R.mipmap.g12, R.mipmap.g13, R.mipmap.g14, R.mipmap.g15, R.mipmap .g16, R.mipmap.g17, R.mipmap.g18, R.mipmap.g19, R.mipmap.g20, R.mipmap.g21, R .mipmap.g22, R.mipmap.g23, R.mipmap.g24, R.mipmap.g25, R.mipmap.g26, R.mipmap .g27, R.mipmap.g28, R.mipmap.g29}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initListAdapterV(); //mRecyclerView.setOnItemClickListener } private void initView() { mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); } private void initData() { for (int i = 0; i < mListIcons.length; i++) { DataBean dataBean = new DataBean(); dataBean.setIconId(mListIcons[i]); dataBean.setText("item " + i + ""); mData.add(dataBean); } } private void initListAdapterV() { //设置layoutManager LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);//默认垂直 mRecyclerView.setLayoutManager(linearLayoutManager); //设置adapter ListAdapter listAdapter = new ListAdapter(MainActivity.this,mData); listAdapter.setOnItemClickListener(new ListAdapter.OnItemClickListener() { @Override public void onClick(View parent, int position) { Toast.makeText(MainActivity.this,"Click + " + position,Toast.LENGTH_SHORT ).show(); } }); mRecyclerView.setAdapter(listAdapter); } private void initListAdapterH() { //设置layoutManager LinearLayoutManager layoutManger = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false); mRecyclerView.setLayoutManager(layoutManger); //设置adapter ListAdapter adapter = new ListAdapter(MainActivity.this, mData); mRecyclerView.setAdapter(adapter); } private void initGridAdapterV() { //设置layoutManager LinearLayoutManager layoutManger = new GridLayoutManager(MainActivity.this, 2); mRecyclerView.setLayoutManager(layoutManger); //设置adapter ListAdapter adapter = new ListAdapter(MainActivity.this, mData); mRecyclerView.setAdapter(adapter); } private void initGridAdapterH() { //设置layoutManager LinearLayoutManager layoutManger = new GridLayoutManager(MainActivity.this, 2, LinearLayoutManager.HORIZONTAL, false); mRecyclerView.setLayoutManager(layoutManger); //设置adapter ListAdapter adapter = new ListAdapter(MainActivity.this, mData); mRecyclerView.setAdapter(adapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_list_v: initListAdapterV(); break; case R.id.action_list_h: initListAdapterH(); break; case R.id.action_grid_v: initGridAdapterV(); break; case R.id.action_grid_h: initGridAdapterH(); break; default: break; } return super.onOptionsItemSelected(item); } }