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. final-----finalize----finally---区别

    一.性质不同 (1)final为关键字: (2)finalize()为方法: (3)finally为为区块标志,用于try语句中: 二.作用 (1)final为用于标识常量的关键字,final标识的关 ...

  2. 第三章 Models模块属性详解

    摘自:http://www.cnblogs.com/xdotnet/archive/2012/03/07/aspnet_mvc40_validate.html 了解了这些就可以对MVC进一步认识,相信 ...

  3. LeetCode 笔记26 Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  4. Bootstrap 排版

    Bootstrap 使用 Helvetica Neue. Helvetica. Arial 和 sans-serif 作为其默认的字体栈. 使用 Bootstrap 的排版特性,您可以创建标题.段落. ...

  5. PCA和LDA降维的比较

    PCA 主成分分析方法,LDA 线性判别分析方法,可以认为是有监督的数据降维.下面的代码分别实现了两种降维方式: print(__doc__) import matplotlib.pyplot as ...

  6. .NET领域最为流行的IOC框架之一Autofac

    一.前言 Autofac是.NET领域最为流行的IOC框架之一,微软的Orchad开源程序使用的就是Autofac,Nopcommerce开源程序也是用的Autofac. Orchad和Nopcomm ...

  7. WP&Win10开发: RichTextBlock实现富文本并处理换行

    思路:1.构建字典.2.在字符串中匹配字典的key,将匹配到的key转换成对应的value3.将替换后的字符串,转化成xaml形式,加载该xaml以实现富文本. 代码如下: private Parag ...

  8. Android开发的那些坑和小技巧

    1.android:clipToPadding 意思是控件的绘制区域是否在padding里面.默认为true.如果你设置了此属性值为false,就能实现一个在布局上事半功陪的效果.先看一个效果图. 上 ...

  9. JAVA并发的性能调整

    1.互斥技术 synchronized Lock Atomic 性能比较Atomic >  Lock  > synchronized,当然这不是绝对的.当线程数比较少时,synchroni ...

  10. Linq之Linq to Objects

    目录 写在前面 系列文章 linq to objects 总结 写在前面 上篇文章介绍了linq的延迟加载特性的相关内容,从这篇文章开始将陆续介绍linq to Objects,linq to xml ...