先看效果

关于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. rsyslog学习

    http://blog.csdn.net/zhaoyangjian724/article/details/52116809 http://blog.csdn.net/zhangxihangzhuan/ ...

  2. Varnish 缓存加速, Varnish 菜鸟看过来,Varnish实战

    Varnish可以有效降低web服务器的负载,提升访问速度.按照HTTP协议的处理过程,web服务器接受请求并且返回处理结果,理想情况下服务器要在不做额外处理的情况下,立即返回结果,但实际情况并非如此 ...

  3. Chrome无界面浏览模式与自定义插件加载问题

    环境:Python 3.5.x + Selenium 3.4.3 + Chromedriver 2.30 + Chrome 60 beta或Chromium Canary 61 + WIN10 Chr ...

  4. ZOJ 2588 Burning Bridges(无向连通图求割边)

    题目地址:ZOJ 2588 由于数组开小了而TLE了..这题就是一个求无向连通图最小割边.仅仅要推断dfn[u]是否<low[v],由于low指的当前所能回到的祖先的最小标号,增加low[v]大 ...

  5. Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果

    这里我们用TabLayout来实现这一效果.TabLayout是Android Design Support Library库中的控件.Google在2015的IO大会上,给我们带来了更加详细的Mat ...

  6. 关于Hive在主节点上与不在主节点上搭建的区别之谈

    Hive不在主节点上搭建,我这里是在HadoopSlave1上.

  7. c#(asp.net) 如何计算两个日期之间相隔天数

    1.DateTime t1 = Convert.ToDateTime("2006-1-6"); DateTime t2 = Convert.ToDateTime("200 ...

  8. noip 2018 day1 T3 赛道修建 贪心_树上问题_multiset

    Code: // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; #define maxn 5000 ...

  9. angularjs input使用ng-model双向绑定无效bug解决

    一.问题描述 当我们给input双向绑定变量的时候,使用ng-model有时候会出现无效的情况 二.解决办法 将绑定的变量写成对象的形式 控制器定义变量: $scope.inputText = {va ...

  10. 安装成功的nginx,如何添加未编译安装模块(非覆盖安装http_image_filter_module)

    背景:1.做了图片上传小项目.2.图片上传,需要多图管理.3.图片上传,需要存储到Fastdfs.4.Fastdfs上的图片,和Nginx结合.5.Nginx从Fastdfs获得的图片,需要使用缩略图 ...