1.添加.jar包

File -> Project-Structure -> 左下角 “app” -> Dependencies -> 右上角“+” -> File dependency -> 选择“com.android.support:recyclerview-v7:23.1.0”

然后在“build-gradle”里面看到“compile ’com.android.support:recyclerview-v7:23.1.0‘”,如果不行,直接复制这句话到这里

MainActivity.java

public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private List<String> mData;
private MyAdapter mAdapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initData();
initView(); mAdapter = new MyAdapter(this,mData);
mRecyclerView.setAdapter(mAdapter); //AS自带的动画效果
mRecyclerView.setItemAnimator(new DefaultItemAnimator()); //设置RecyclerView的布局管理
LinearLayoutManager manager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
mRecyclerView.setLayoutManager(manager); //设置RecyclerView的Item间分割线
//直接在item.xml文件中设置android:layout_margin="6dp"取代这句话
mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST)); mAdapter.onViewItemClickListener(new MyAdapter.onViewItemClick() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this,"Click : "+position,Toast.LENGTH_SHORT).show();
} @Override
public void onItemLongClick(View view, int position) {
Toast.makeText(MainActivity.this,"Long Click : "+position,Toast.LENGTH_SHORT).show();
mAdapter.itemRemove(position);
}
});
} private void initData(){ mData = new ArrayList<String>();
for (int i = 'A';i <= 'z';i++) {
mData.add(" "+(char)i);
}
} private void initView() {
mRecyclerView = (RecyclerView) findViewById(R.id.rv_recycler);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add:
mAdapter.itemAdd(1);
break;
case R.id.action_delete:
mAdapter.itemRemove(1);
break; case R.id.action_diary:
mRecyclerView.setLayoutManager(new GridLayoutManager(this,3));
break;
case R.id.action_catalog:
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
break;
case R.id.action_more:
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL));
break;
case R.id.action_demo:
Intent intent = new Intent(MainActivity.this,StraggedGridViewActivity.class);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
}

MyAdapter.java

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
private List<String> mData;
private LayoutInflater mInflater;
private Context mContext; private onViewItemClick onViewItemClickListener; public void onViewItemClickListener(onViewItemClick listener){
this.onViewItemClickListener = listener;
} public MyAdapter(Context context,List<String> data) {
this.mContext = context;
this.mData = data;
this.mInflater = LayoutInflater.from(context);
} //创建ViewHolder
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.item,parent,false);
MyViewHolder viewHolder = new MyViewHolder(view); return viewHolder;
} //绑定ViewHolder
//final是自动添加上去的
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
holder.tv.setText(mData.get(position)); /*if (onViewItemClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onViewItemClickListener.onItemClick(holder.itemView,position);
}
});
}*/ holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//直接position不会刷新位置信息
int layoutPosition = holder.getLayoutPosition();
//onViewItemClickListener.onItemClick(holder.itemView,position);
onViewItemClickListener.onItemClick(holder.itemView,layoutPosition);
}
}); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int layoutPosition = holder.getLayoutPosition();
onViewItemClickListener.onItemLongClick(holder.itemView,layoutPosition);
return false;
}
});
} @Override
public int getItemCount() {
//return 0;
return mData.size();
} //自定义添加item方法
public void itemAdd(int position) {
//不是notifyItemChanged(),这是把position位置的给取代了
mData.add(position, "SSS");
notifyItemInserted(position);
//notifyItemChanged(position);
} //自定义删除item方法
public void itemRemove(int position) {
mData.remove(position);
notifyItemRemoved(position);
} //监听点击事件的接口
public interface onViewItemClick {
void onItemClick(View view, int position);
void onItemLongClick(View view, int position);
} } //MyViewHolder拥有所有item.xml的控件
class MyViewHolder extends RecyclerView.ViewHolder {
//tv不能是private,因为MyAdapter类中的onBindViewHolder()要调用
TextView tv; public MyViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv_text);
}
}

StraggedGridViewActivity.java

public class StraggedGridViewActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private List<String> mData;
private StraggedGridViewAdapter mAdapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stragged_grid_view); initData();
initView(); mAdapter = new StraggedGridViewAdapter(this,mData);
mRecyclerView.setAdapter(mAdapter); mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
} private void initData(){
mData = new ArrayList<String>();
for (int i = 'A';i <= 'z';i++) {
mData.add(" "+(char)i);
}
} private void initView() {
mRecyclerView = (RecyclerView) findViewById(R.id.rv_recycler);
}
}

StraggedGridViewAdapter.java

public class StraggedGridViewAdapter extends RecyclerView.Adapter<MyViewHolder2> {
private List<String> mData;
private LayoutInflater mInflater;
private Context mContext; private List<Integer> mHeight; public StraggedGridViewAdapter(Context context,List<String> data) {
this.mContext = context;
this.mData = data;
this.mInflater = LayoutInflater.from(context); mHeight = new ArrayList<Integer>();
for (int i = 0;i <mData.size();i++) {
mHeight.add((int) (100+Math.random()*300));
}
} //创建ViewHolder
@Override
public MyViewHolder2 onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.item,parent,false);
MyViewHolder2 viewHolder = new MyViewHolder2(view); return viewHolder;
} //绑定ViewHolder
@Override
public void onBindViewHolder(MyViewHolder2 holder, int position) {
//动态高度的设置
ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
lp.height = mHeight.get(position);
holder.itemView.setLayoutParams(lp);
holder.tv.setText(mData.get(position));
} @Override
public int getItemCount() {
//return 0;
return mData.size();
}
} //MyViewHolder拥有所有item.xml的控件
class MyViewHolder2 extends RecyclerView.ViewHolder {
//tv不能是private,因为MyAdapter类中的onBindViewHolder()要调用
TextView tv; public MyViewHolder2(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv_text);
}
}

DividerItemDecoration.java    //这是分割线,可以不要,在divider.xml和styles.xml里面可以取代

public class DividerItemDecoration extends RecyclerView.ItemDecoration
{ private static final int[] ATTRS = new int[] { android.R.attr.listDivider }; public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; private Drawable mDivider; //item间间隔图片资源 private int mOrientation; //方向:水平,垂直 public DividerItemDecoration(Context context, int orientation)
{
final TypedArray a = context.obtainStyledAttributes(ATTRS);
mDivider = a.getDrawable(0);
a.recycle();
setOrientation(orientation);
} public void setOrientation(int orientation)
{
if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST)
{
throw new IllegalArgumentException("invalid orientation");
}
mOrientation = orientation;
} @Override
public void onDraw(Canvas c, RecyclerView parent)
{
//Log.v("recyclerview - itemdecoration", "onDraw()");
if (mOrientation == VERTICAL_LIST) {
drawVertical(c, parent);
} else {
drawHorizontal(c, parent);
}
} public void drawVertical(Canvas c, RecyclerView parent)
{
final int left = parent.getPaddingLeft();
final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++)
{
final View child = parent.getChildAt(i);
RecyclerView v = new RecyclerView(
parent.getContext());
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int top = child.getBottom() + params.bottomMargin;
final int bottom = top + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
} public void drawHorizontal(Canvas c, RecyclerView parent)
{
final int top = parent.getPaddingTop();
final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++)
{
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
.getLayoutParams();
final int left = child.getRight() + params.rightMargin;
final int right = left + mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(c);
}
} //提供绘制分割线的间隙
@Override
public void getItemOffsets(Rect outRect, int itemPosition,
RecyclerView parent)
{
if (mOrientation == VERTICAL_LIST)
{
outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
} else
{
outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
}
}
}

main_activity.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/rv_recycler"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</RelativeLayout>

activity_stragged_grid_view.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"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="my.com.example.x550v.recyclerviewdemo.StraggedGridViewActivity"> <android.support.v7.widget.RecyclerView
android:id="@+id/rv_recycler"
android:layout_height="match_parent"
android:layout_width="match_parent"/> </RelativeLayout>

item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:layout_marginRight="5dp"
android:layout_marginLeft="5dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_text"
android:gravity="center"
android:textColor="#fff"
android:textSize="20sp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>

divider.xml

<!--写完后要在styles里面声明-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size android:height="4dp"/>
<gradient
android:startColor="#000"
android:centerColor="#fff"
android:endColor="#fff"
android:type="linear"/>
</shape>

buttom.xml

<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="false">
<shape
android:shape="rectangle">
<gradient
android:angle="45"
android:centerX="35%"
android:centerColor="#43D2E8"
android:startColor="#43D2E8"
android:endColor="#000000"
android:type="linear"
/>
</shape>
</item> <item
android:state_pressed="true"
>
<shape
android:shape="rectangle">
<gradient
android:angle="45"
android:centerX="35%"
android:centerColor="#B3DDE8"
android:startColor="#43D2E8"
android:endColor="#000000"
android:type="linear"
/>
</shape>
</item> </selector>

menu.xml

<menu
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"
tools:context="my.com.example.x550v.recyclerviewdemo.MainActivity"> <item
android:id="@+id/action_add"
android:title="Add"
android:icon="@android:drawable/ic_media_play"
app:showAsAction="ifRoom"/> <item
android:id="@+id/action_delete"
android:title="Add"
android:icon="@android:drawable/ic_media_pause"
app:showAsAction="ifRoom"/> <item
android:id="@+id/action_both"
android:title="action"
android:icon="@android:drawable/ic_input_add"
app:showAsAction="ifRoom|collapseActionView"> <menu>
<item
android:id="@+id/action_diary"
android:title="GirdView"
android:icon="@android:drawable/ic_menu_save"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_catalog"
android:title="LinearView"
android:icon="@android:drawable/ic_menu_sort_by_size"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_more"
android:title="StaggeredGridView"
android:icon="@android:drawable/ic_menu_myplaces"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_demo"
android:title="StaggeredGridDemoView"
android:icon="@android:drawable/ic_menu_mapmode"
app:showAsAction="ifRoom"/>
</menu>
</item> </menu>

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item> <!--设置分割线-->
<item name="android:listDivider">@drawable/diver</item> </style>

运行效果:

          

      

RecyclerView的使用方法的更多相关文章

  1. recyclerView中的方法

    onCreateViewHolder(); onBindViewHolder(); getItemCount(); recyclerVIew中没有添加头布局和尾布局方法.可以用getItemViewT ...

  2. 更新RecyclerView的好方法

    一般在使用RecyclerView的时候不免要修改RecyclerView的数据,使用notifyDataSetChanged()来刷新界面,但是当数据比较多,而只是修改了一点的数据,或者刷新比较频繁 ...

  3. ListView的基本使用方法和RecyclerView的基本使用方法

    ListView是一种用于列表显示数据内容的控件,它可以通过适配器实现对于数据的列表显示,而RecyclerView是对于ListView优化后的列表数据显示控件. 个人对于List的使用经历多半在新 ...

  4. RecyclerView使用大全

    RecylerView介绍 RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字recyler ...

  5. 打造android偷懒神器———RecyclerView的万能适配器

    转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...

  6. 自定义RecyclerView.ItemDecoration,实现RecyclerView的分割线效果

    [转] 原文 自定义RecyclerView.ItemDecoration,实现RecyclerView的分割线效果 字数1598 阅读302 评论2 喜欢23 1.背景   RecyclerView ...

  7. RecyclerView 滑动检测 (上滑 up)(下滑 down)(顶部 top)(底部 bottom)

      RecyclerView 给我们的可以检测滑动事件的接口 只有 一个方法 recyclerview.setOnScrollListener()或者 recyclerview.addOnScroll ...

  8. IT蓝豹--RecyclerView加载不同view实现效果

    本项目由开发者:黄洞洞精心为初学者编辑RecyclerView的使用方法. RecyclerView加载不同view实现效果,支持加载多个view,并且支持用volley获取数据, 项目主要介绍: 初 ...

  9. RecyclerView再封装

    RecyclerView做为ListView的替代品,已经出了很久了,既然是替代品,那自然有些ListView没有的优点.比如说:可以随意切换list,grid,stagger.可以指定一个或多个it ...

随机推荐

  1. poj1144

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12521   Accepted: 5760 Descript ...

  2. 21SpringMvc_异步发送表单数据到Bean,并响应JSON文本返回(这篇可能是最重要的一篇了)

    这篇文章实现三个功能:1.在jsp页面点击一个按钮,然后跳转到Action,在Action中把Emp(int id ,String salary,Data data)这个实体变成JSON格式返回到页面 ...

  3. fenghuangscannerV3 EXE版本

    作者wils0n未给出EXE版本,鼓捣了下: 1.安装pyinstaller 2.fenghuangscanner目录防止pyinstaller下 3. pyinstaller.py --consol ...

  4. scrapy 的三个入门应用场景

    说明: 本文参照了官网的 dmoz 爬虫例子. 不过这个例子有些年头了,而 dmoz.org 的网页结构已经不同以前.所以我对xpath也相应地进行了修改. 概要: 本文提出了scrapy 的三个入门 ...

  5. livewriter写Blog 神秘失踪?

    现在习惯用livewriter来总结/记录一些知识并发布为Blog 与同行交流,但是今天发生了一个怪事,上午我整理了两篇文档当时就用livewriter发送到了Blog上,但是晚上来看的时候之前发送的 ...

  6. EL表达式 (详解)

    L表达式      1.EL简介 1)语法结构        ${expression} 2)[]与.运算符      EL 提供.和[]两种运算符来存取数据.      当要存取的属性名称中包含一些 ...

  7. 使用mobile.changePage()时出现的问题(转)

    使用mobile.changePage()页面跳转,当跳转到目标页面时,目标页面中的初始化js如$().ready()及其他引入的js都无法执 行,重新刷新页面后才会执行.想到changePage() ...

  8. 基于DDD的.NET开发框架 - ABP初探

    返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...

  9. php模式设计之 单例模式

    模式设计是什么?初学者一开始会被这高大上的名称给唬住.而对于有丰富编程经验的老鸟来说,模式设计又是无处不在.很多接触的框架就是基于各种模式设计形成的. 简单说,在写代码的过程中一开始往往接触的是面向过 ...

  10. 【android】侧滑关闭activity

    最近在使用IOS系统的时候,发现侧滑关闭很实用,因为单手就可以操作,不需要点击左上角的回退按钮.或者返回键了. 所以打算在android上实现这个技术. 需求: 1:IOS只能在屏幕边缘开始,往中间进 ...