RecyclerView的使用

原创 2017年01月03日 09:26:21

一.RecyclerView的介绍

  • 通过布局管理器LayoutManager,控制其显示的方式
  • 通过ItemDecoration,控制Item间的间隔
  • 通过ItemAnimator,控制Item增删的动画
  • 点击、长按事件,需要自己实现

二.RecyclerView的使用

直接上代码:

MainActiivity.java

package recycleviewdemo.zhoujian.com.recycleviewdemo.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

import recycleviewdemo.zhoujian.com.recycleviewdemo.R;
import recycleviewdemo.zhoujian.com.recycleviewdemo.adapter.MainAdapter;
import recycleviewdemo.zhoujian.com.recycleviewdemo.adapter.MainAdapter.OnItemClickLitener;
import recycleviewdemo.zhoujian.com.recycleviewdemo.bean.Person;
import recycleviewdemo.zhoujian.com.recycleviewdemo.view.DividerGridItemDecoration;
import recycleviewdemo.zhoujian.com.recycleviewdemo.view.DividerItemDecoration;

public class MainActivity extends Activity
{

    private RecyclerView mRecyclerView;
    private ArrayList<Person> personList;
    private MainAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        initData();
        initView();
        initListView();
        //initGridView();
        initEvent();

    }

    private void initGridView()
    {

        mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));
        mRecyclerView.addItemDecoration(new DividerGridItemDecoration(this));
        // 设置item动画
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
        mRecyclerView.setAdapter(mAdapter);

    }

    private void initListView()
    {
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST));
        // 设置item动画
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
        mRecyclerView.setAdapter(mAdapter);


    }

    private void initView() {


        TextView tv_start= (TextView) findViewById(R.id.tv_start);

        tv_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this,WaterFallActivity.class));
            }
        });

        mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
        mAdapter = new MainAdapter(this, personList);


    }

    private void initEvent()
    {
        mAdapter.setOnItemClickLitener(new OnItemClickLitener()
        {
            @Override
            public void onItemClick(View view, int position)
            {
                Toast.makeText(MainActivity.this, personList.get(position).getName(),Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onItemLongClick(View view, int position)
            {
                Toast.makeText(MainActivity.this, personList.get(position).getName(),Toast.LENGTH_SHORT).show();
            }
        });
    }

    protected void initData()
    {
        personList = new ArrayList<Person>();
        Person mPerson0= new Person("宋江");
        personList.add(mPerson0);
        Person mPerson1= new Person("卢俊义");
        personList.add(mPerson1);
        Person mPerson2= new Person("吴用");
        personList.add(mPerson2);
        Person mPerson3= new Person("公孙胜");
        personList.add(mPerson3);
        Person mPerson4= new Person("关胜");
        personList.add(mPerson4);
        Person mPerson5= new Person("林冲");
        personList.add(mPerson5);
        Person mPerson6= new Person("秦明");
        personList.add(mPerson6);
        Person mPerson7= new Person("呼延灼");
        personList.add(mPerson7);
        Person mPerson8= new Person("花荣");
        personList.add(mPerson8);
        Person mPerson9= new Person("柴进");
        personList.add(mPerson9);
        Person mPerson10= new Person("李应");
        personList.add(mPerson10);
        Person mPerson11= new Person("鲁智深");
        personList.add(mPerson11);
    }
}

MainAdapter.java

package recycleviewdemo.zhoujian.com.recycleviewdemo.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import recycleviewdemo.zhoujian.com.recycleviewdemo.R;
import recycleviewdemo.zhoujian.com.recycleviewdemo.bean.Person;

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MyViewHolder>
{

    private ArrayList<Person> mDatas;
    private LayoutInflater mInflater;
    private OnItemClickLitener mOnItemClickLitener;

    public interface OnItemClickLitener
    {
        void onItemClick(View view, int position);
        void onItemLongClick(View view, int position);
    }

    public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
    {
        this.mOnItemClickLitener = mOnItemClickLitener;
    }


    public MainAdapter(Context context, ArrayList<Person> datas)
    {
        mInflater = LayoutInflater.from(context);
        mDatas = datas;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        MyViewHolder holder = new MyViewHolder(mInflater.inflate(
                R.layout.item_home, parent, false));
        return holder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position)
    {
        holder.tv.setText(mDatas.get(position).getName());

        // 如果设置了回调,则设置点击事件
        if (mOnItemClickLitener != null)
        {
            holder.itemView.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickLitener.onItemClick(holder.itemView, pos);
                }
            });

            holder.itemView.setOnLongClickListener(new OnLongClickListener()
            {
                @Override
                public boolean onLongClick(View v)
                {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickLitener.onItemLongClick(holder.itemView, pos);
                    removeData(pos);
                    return false;
                }
            });
        }
    }

    @Override
    public int getItemCount()
    {
        return mDatas.size();
    }

    public void removeData(int position)
    {
        mDatas.remove(position);
        notifyItemRemoved(position);
    }

    class MyViewHolder extends ViewHolder
    {

        TextView tv;
        public MyViewHolder(View view)
        {
            super(view);
            tv = (TextView) view.findViewById(R.id.id_num);

        }
    }
}

ListView的效果

这里写图片描述

GridView的效果

这里写图片描述

瀑布流效果

这里写图片描述

三.RecyclerView的分割线

上面的分割线是默认的显示效果,也可以自定义显示效果

在styles.xml中添加代码:

<item name="android:listDivider">@drawable/divider_bg</item>

三.源码下载

源码下载:https://github.com/zeke123/RecycleViewDemo

版权声明:本文为博主原创文章,未经博主允许不得转载。

eclipse使用recyclerview demo示例

  • 2017年11月29日 16:19
  • 3.38MB
  • 下载

recyclerview的使用

  • 2017年11月24日 17:49
  • 29.56MB
  • 下载

RecyclerView使用 及 滑动时加载图片优化方案

本篇博文主要给大家分享关于RecyclerView控件的使用及通过继承RecyclerView来实现滑动时加载图片的优化方案,也同样能解决防止图片乱序的问题,之前有在网上有看到大神对Android中L...
  • gao_chun
  • gao_chun
  • 2015年09月21日 17:18
  • 16939

电视TV端使用RecyclerView开发遇到的问题

最近在做一个TV端使用的相册。偷偷展示一下,相册大概长这个样子: 相册也支持多选删除: 非删除模式下点击单一图片会进入单一图片展示界面。单一图片可以左右翻页。 从展示界面返回相册界面,光标定位到...

RecyclerView的简单使用

  • 2015年08月05日 13:45
  • 3.08MB
  • 下载

一篇博客理解Recyclerview的使用

从Android 5.0开始,谷歌公司推出了RecylerView控件,当看到RecylerView这个新控件的时候,大部分人会首先发出一个疑问,recylerview是什么?为什么会有recyler...

RecyclerView使用详解-示例源码

  • 2017年06月30日 20:25
  • 2.75MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RecyclerView的使用
举报原因:
原因补充:

(最多只允许输入30个字)