先看效果

关于RecyclerView,真的是很强大。

个人觉得主要方便的地方是

1.直接可以设置条目布局,通过setLayoutManager

  

  1. LinearLayoutManager:线性布局,横向或者纵向滑动列表
  2. GridLayoutManager:表格布局
  3. StaggeredGridLayoutManager:流式布局,例如瀑布流效果

2.可以直接设置分割线       addItemDecoration方法

3.直接设置添加删除item动画   setItemAnimator方法

4.对View的复用性好  (这个是别人总结的,我还没看源码)

5.对于分割线,和增删动画,github上开源的类很多

下面看看怎么用法

  一 导入包,v7的recyclerview包

  二 布局

activity_main.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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.myrecyclerview.MainActivity" > <android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview_vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </RelativeLayout>

item布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="#8A2BE2"
android:layout_margin="3dp"
android:layout_height="wrap_content" > <TextView
android:id="@+id/id_num"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="1" />
</FrameLayout>

三,创建Adapter

package com.example.myrecycleviewdemo;

import java.util.ArrayList;
import java.util.List; import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
Context mcontext;
List<String> mlist;
List<Integer> mheight;
public MyAdapter(Context context, List<String> list) {
mcontext=context;
mlist=list;
//随机高度集合
mheight=new ArrayList<Integer>();
for(int i=0;i<mlist.size();i++){
mheight.add((int)(100+Math.random()*300));
}
} @Override
public int getItemCount() { return mlist.size();
} //找到布局中空间位置
class MyViewHolder extends RecyclerView.ViewHolder{
TextView tv;
public MyViewHolder(View arg0) {
super(arg0); tv=(TextView) arg0.findViewById(R.id.id_num);
} } //绑定,渲染数据到view中
@Override
public void onBindViewHolder(MyViewHolder holder, int arg1) { LayoutParams lp=holder.tv.getLayoutParams();
lp.height=mheight.get(arg1);
holder.tv.setLayoutParams(lp);
holder.tv.setText(mlist.get(arg1)); } //先执行onCreateViewHolder
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int arg1) { MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
mcontext).inflate(R.layout.item, parent,
false));
return holder;
} public void add(int pos) { mlist.add(pos, "insert");
mheight.add((int)(100+Math.random()*300));
notifyItemInserted(pos);
} public void del(int pos) { mlist.remove(pos);
notifyItemRemoved(pos);
} }

这里的Adapter需要继承RecyclerView.Adapter,需要实现3个方法:

- onCreateViewHolder()

- onBindViewHolder()

- getItemCount()

最后,MainActivity

package com.example.myrecycleviewdemo;

import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.Menu;
import android.view.MenuItem; public class MainActivity extends Activity {
RecyclerView recyclerView;
List<String> mlist;
MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData(); initview(); }
private void initview() {
recyclerView=(RecyclerView) findViewById(R.id.recyclerview_vertical);
adapter=new MyAdapter(this,mlist);
//设置动画
recyclerView.setItemAnimator(new DefaultItemAnimator());
//设置分割线
//recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
//recyclerView.setLayoutManager(new LinearLayoutManager(this));
//设置布局
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));
recyclerView.setAdapter(adapter);
}
private void initData() {
mlist=new ArrayList<String>();
for(int i=0;i<50;i++){
mlist.add("number"+i);
} } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml. switch (item.getItemId())
{
case R.id.add:
adapter.add(1);
break;
case R.id.del:
adapter.del(1);
break;
} return true;
}
}

更换布局,分割线,动画的方式很简单,直接通过方法让不同的类当参数。

初步使用RecyclerView实现瀑布流的更多相关文章

  1. Android RecyclerView(瀑布流)水平/垂直方向分割线

     Android RecyclerView(瀑布流)水平/垂直方向分割线 Android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现Recycle ...

  2. RecyclerView 制作瀑布流图片

    这是瀑布流的效果图 RecyclerView(ListView的升级版) 加载图片用的是第三方图片加载框架 ------------------------------------- 在Xml中 &l ...

  3. [Android Pro] RecyclerView实现瀑布流效果(二)

    referece to : http://blog.csdn.net/u010687392 在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutMa ...

  4. 使用RecyclerView实现瀑布流的效果

    主函数: public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; privat ...

  5. RecyclerView实现瀑布流效果(图文详解+源码奉送)

    最近有时间研究了一下RecyclerView,果然功能强大啊,能实现的效果还是比较多的,那么今天给大家介绍一个用RecyclerView实现的瀑布流效果. 先来一张效果图: 看看怎么实现吧: 整体工程 ...

  6. RecyclerView实现瀑布流效果(二)

    在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutManager.GridLayoutManager.StaggeredGridLayoutMan ...

  7. 用RecyclerView实现瀑布流

    首先建立一个 PbRecyclerViewActivity.java文件: 1 public class PbRecyclerViewActivity extends AppCompatActivit ...

  8. 基于RecyclerView的瀑布流实现

    fragment的布局: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

  9. RecyclerView实例-实现可下拉刷新上拉加载更多并可切换线性流和瀑布流模式(1)

    摘要 最近项目有个列表页需要实现线性列表和瀑布流展示的切换,首先我想到的就是上 [RecyclerView],他本身已经很好的提供了三种布局方式,只是简单做个切换应该是很简单的事情,如果要用Recyc ...

随机推荐

  1. hibernate session.save()和session.persist()的区别

    save()需要返回一个Serialzable的实现类,因此执行这个方法时会马上插入到数据库 而persist()不会立即插入到数据库. "当我们封装一个长会话流程的时候,persist() ...

  2. IIS集成和经典配置

    检測到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式).  我们将ASP.NET程序从IIS6移植到IIS7,可能执行提示下面错误: HTTP 错误 500. ...

  3. jquery tmpl插件

    动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在 ...

  4. Gym - 100203A Ariel 暴力+位运算

    题意:第i种生物有k[i]个特征,分数是score[i],现在要参加竞赛,报出一种生物a,和一些特征h[i],参加竞赛的所有生物在这些h[i]上面的特征是一样的,a生物有h[i],则所有竞赛的生物都必 ...

  5. sql 向上取整 向下取整 四舍五入的实例;

    SELECT CEILING(23.5/4)'向上取整' ---6 :SELECT FLOOR(23.5/4)'向下取整' ---5 :SELECT ROUND(23.5/4,1)'四舍五入' --5 ...

  6. SQL中NUMERIC和DECIMAL的区别

    numeric 和 decimal 数据类型的默认最大精度值是 38.在 Transact-SQL 中,numeric 与 decimal 数据类型在功能上等效. decimal(numeric ) ...

  7. useradd

    功能说明:useradd命令可用于创建新的用户或者更改用户的信息. 语法格式:useradd [选项] [用户名]useradd -D [选项] 选项说明:1.使用useradd常规添加用户工作原理流 ...

  8. 手把手教你安装Navicat——靠谱的Navicat安装教程

    Navicat是一款轻量级的用于MySQL连接和管理的工具,非常好用,使用起来方便,简洁.下面讲讲其安装的过程. 1.进入navicat官网,选择Navicat for MySQL,然后点击进行下载即 ...

  9. java关于File.separator

    写好代码在模拟环境下测试,完全没问 题:但linux+tomcat下用的时候,却老是报告“No such file or diretory ”的异常,上传不了.后来发现是文件路径的问题.我的模拟测试环 ...

  10. codeforces111D. Petya and Coloring(组合数学,计数问题)

    传送门: 解题思路: 要求一条直线分割矩阵时左右颜色数一样,那么就说明一个问题.直线左右移动时是不会改变左右矩阵的颜色集合的.所以说明:2~m-1列的颜色集一定属于第一列与第m列颜色集的交集.而且第一 ...