RecyclerView的使用
- /**
- * 设置Adapter
- */
- mRecyclerView.setAdapter(mListAdapter);
- /**
- * 设置布局管理器
- */
- mRecyclerView.setLayoutManager(linearLayoutManager);
- /**
- * 设置item分割线
- */
- mRecyclerView.addItemDecoration(itemDecoration);
- /**
- * 设置item动画
- */
- mRecyclerView.setItemAnimator(new DefaultItemAnimator());
- package com.bbk.lling.recyclerview;
- import android.support.v7.app.ActionBarActivity;
- import android.os.Bundle;
- import android.support.v7.widget.DefaultItemAnimator;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.Toast;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * @Class: ListLayoutActivity
- * @Description: RecycleView实现listview的功能
- * @author: lling(www.liuling123.com)
- * @Date: 2015/10/29
- */
- public class ListLayoutActivity extends ActionBarActivity {
- private RecyclerView mRecyclerView;
- private ListAdapter mListAdapter;
- private List<String> mDatas;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_list_layout);
- initData();
- mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
- mListAdapter = new ListAdapter(this, mDatas);
- mListAdapter.setOnItemClickListener(new ListAdapter.OnItemClickListener() {
- @Override
- public void onItemClick(View view, int position) {
- Toast.makeText(ListLayoutActivity.this, "Click" + mDatas.get(position), Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onItemLongClick(View view, int position) {
- mListAdapter.remove(position); //remove the item
- Toast.makeText(ListLayoutActivity.this, "LongClick" + mDatas.get(position), Toast.LENGTH_SHORT).show();
- }
- });
- mRecyclerView.setAdapter(mListAdapter);
- /**
- * 设置布局管理器,listview风格则设置为LinearLayoutManager
- * gridview风格则设置为GridLayoutManager
- * pu瀑布流风格的设置为StaggeredGridLayoutManager
- */
- mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
- // 设置item分
- mRecyclerView.addItemDecoration(new ListItemDecoration(this, LinearLayoutManager.VERTICAL));
- // 设置item动画
- mRecyclerView.setItemAnimator(new DefaultItemAnimator());
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_list_layout, menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.add_first:
- mListAdapter.add(0, "add first");
- break;
- case R.id.add_last:
- mListAdapter.add(mListAdapter.getItemCount(), "add last");
- break;
- case R.id.remove_first:
- String value = mListAdapter.remove(0);
- Toast.makeText(ListLayoutActivity.this, "remove:" + value, Toast.LENGTH_SHORT).show();
- break;
- case R.id.remove_last:
- String value1 = mListAdapter.remove(mListAdapter.getItemCount()-1);
- Toast.makeText(ListLayoutActivity.this, "remove:" + value1, Toast.LENGTH_SHORT).show();
- break;
- case R.id.horizontal:
- mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
- mRecyclerView.addItemDecoration(new ListItemDecoration(this, LinearLayoutManager.HORIZONTAL));
- break;
- case R.id.vertical:
- mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
- mRecyclerView.addItemDecoration(new ListItemDecoration(this, LinearLayoutManager.VERTICAL));
- break;
- }
- return super.onOptionsItemSelected(item);
- }
- /* ==========This Part is not necessary========= */
- /**
- * Create datas
- */
- protected void initData() {
- mDatas = new ArrayList<String>();
- for (int i = 0; i < 100; i++) {
- mDatas.add(String.valueOf(i));
- }
- }
- /* ==========This Part is not necessary========= */
- }
- <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.support.v7.widget.RecyclerView
- android:id="@+id/recyclerview"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- </RelativeLayout>
- package com.bbk.lling.recyclerview;
- import android.annotation.SuppressLint;
- import android.content.Context;
- import android.support.v7.widget.RecyclerView;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.TextView;
- import java.util.List;
- /**
- * @Class: ListAdapter
- * @Description: 数据适配器
- * @author: lling(www.liuling123.com)
- * @Date: 2015/10/29
- */
- public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ItemViewHolder> {
- private List<String> mDatas;
- private LayoutInflater mInflater;
- private OnItemClickListener mOnItemClickListener;
- public ListAdapter(Context context, List<String> mDatas) {
- this.mDatas = mDatas;
- mInflater = LayoutInflater.from(context);
- }
- @Override
- public int getItemCount() {
- return mDatas.size();
- }
- @SuppressLint("NewApi")
- @Override
- public void onBindViewHolder(final ItemViewHolder itemViewHolder, final int i) {
- itemViewHolder.mTextView.setText(mDatas.get(i));
- if(mOnItemClickListener != null) {
- /**
- * 这里加了判断,itemViewHolder.itemView.hasOnClickListeners()
- * 目的是减少对象的创建,如果已经为view设置了click监听事件,就不用重复设置了
- * 不然每次调用onBindViewHolder方法,都会创建两个监听事件对象,增加了内存的开销
- */
- if(!itemViewHolder.itemView.hasOnClickListeners()) {
- Log.e("ListAdapter", "setOnClickListener");
- itemViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- int pos = itemViewHolder.getPosition();
- mOnItemClickListener.onItemClick(v, pos);
- }
- });
- itemViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- int pos = itemViewHolder.getPosition();
- mOnItemClickListener.onItemLongClick(v, pos);
- return true;
- }
- });
- }
- }
- }
- @Override
- public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
- /**
- * 使用RecyclerView,ViewHolder是可以复用的。这根使用ListView的VIewHolder复用是一样的
- * ViewHolder创建的个数好像是可见item的个数+3
- */
- Log.e("ListAdapter", "onCreateViewHolder");
- ItemViewHolder holder = new ItemViewHolder(mInflater.inflate(
- R.layout.item_layout, viewGroup, false));
- return holder;
- }
- /**
- * 向指定位置添加元素
- * @param position
- * @param value
- */
- public void add(int position, String value) {
- if(position > mDatas.size()) {
- position = mDatas.size();
- }
- if(position < 0) {
- position = 0;
- }
- mDatas.add(position, value);
- /**
- * 使用notifyItemInserted/notifyItemRemoved会有动画效果
- * 而使用notifyDataSetChanged()则没有
- */
- notifyItemInserted(position);
- }
- /**
- * 移除指定位置元素
- * @param position
- * @return
- */
- public String remove(int position) {
- if(position > mDatas.size()-1) {
- return null;
- }
- String value = mDatas.remove(position);
- notifyItemRemoved(position);
- return value;
- }
- public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) {
- this.mOnItemClickListener = mOnItemClickListener;
- }
- /**
- * 处理item的点击事件和长按事件
- */
- interface OnItemClickListener {
- public void onItemClick(View view, int position);
- public void onItemLongClick(View view, int position);
- }
- class ItemViewHolder extends RecyclerView.ViewHolder {
- private TextView mTextView;
- public ItemViewHolder(View itemView) {
- super(itemView);
- mTextView = (TextView) itemView.findViewById(R.id.textview);
- }
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <TextView
- android:id="@+id/textview"
- android:layout_width="wrap_content"
- android:layout_height="48dp"
- android:minWidth="48dp"
- android:gravity="center"
- android:layout_centerInParent="true"
- android:text="XXX"/>
- </RelativeLayout>
- package com.bbk.lling.recyclerview;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Rect;
- import android.graphics.drawable.Drawable;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import android.view.View;
- /**
- * @Class: ListItemDecoration
- * @Description: listview的item分割线
- * @author: lling(www.liuling123.com)
- * @Date: 2015/10/29
- */
- public class ListItemDecoration extends RecyclerView.ItemDecoration {
- private Drawable mDrawable;
- private final static int DEFAULT_ORENTATION = LinearLayoutManager.VERTICAL;
- private int mOrientation;
- public ListItemDecoration(Context context, int orientation) {
- if(orientation != LinearLayoutManager.HORIZONTAL && orientation != LinearLayoutManager.VERTICAL) {
- this.mOrientation = DEFAULT_ORENTATION;
- } else {
- this.mOrientation = orientation;
- }
- mDrawable = context.getResources().getDrawable(R.drawable.divider);
- }
- @Override
- public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
- if(mOrientation == LinearLayoutManager.HORIZONTAL) {
- drawHorizontal(c, parent);
- } else {
- drawVertical(c, parent);
- }
- }
- private void drawHorizontal(Canvas c, RecyclerView parent) {
- int top = parent.getPaddingTop();
- int bottom = parent.getHeight() - parent.getPaddingBottom();
- int childCount = parent.getChildCount();
- for (int i = 0; i < childCount; i++) {
- View child = parent.getChildAt(i);
- RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
- .getLayoutParams();
- int left = child.getRight() + params.rightMargin;
- int right = left + mDrawable.getIntrinsicHeight();
- mDrawable.setBounds(left, top, right, bottom);
- mDrawable.draw(c);
- }
- }
- private void drawVertical(Canvas c, RecyclerView parent) {
- int left = parent.getPaddingLeft();
- int right = parent.getWidth() - parent.getPaddingRight();
- int childCount = parent.getChildCount();
- for (int i = 0; i < childCount; i++) {
- View child = parent.getChildAt(i);
- android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext());
- RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
- .getLayoutParams();
- int top = child.getBottom() + params.bottomMargin;
- int bottom = top + mDrawable.getIntrinsicHeight();
- mDrawable.setBounds(left, top, right, bottom);
- mDrawable.draw(c);
- }
- }
- @Override
- public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
- super.getItemOffsets(outRect, view, parent, state);
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
- <size android:height="1dp" android:width="1dp"/>
- <!--<solid android:color="#e0e0e0"/>-->
- <solid android:color="#ff0000"/>
- </shape>

RecyclerView的使用的更多相关文章
- RecyclerView使用大全
RecylerView介绍 RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字recyler ...
- 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载
title: 带你实现开发者头条APP(五)--RecyclerView下拉刷新上拉加载 tags: -RecyclerView,下拉刷新,上拉加载更多 grammar_cjkRuby: true - ...
- 安卓易学,爬坑不易——腾讯老司机的RecyclerView局部刷新爬坑之路
针对手游的性能优化,腾讯WeTest平台的Cube工具提供了基本所有相关指标的检测,为手游进行最高效和准确的测试服务,不断改善玩家的体验.目前功能还在免费开放中. 点击地址:http://wetest ...
- Android Studio开发RecyclerView遇到的各种问题以及解决(二)
开发RecyclerView时候需要导入别人的例子,我的是从github导入的,下载下github的压缩包之后解压看你要导入的文件是priject还是Module.(一般有app文件夹的大部分是pro ...
- Android Studio开发RecyclerView遇到的各种问题以及解决(一)
以前一直在用ListView,,,最近才看RecyclerView发现好强大.RecyclerView前提是Android版本在5.0以上,本人以前用的是eclipse只支持到4.4.索性就安装一个A ...
- Android的Kotlin秘方(II):RecyclerView 和 DiffUtil
作者:Antonio Leiva 时间:Sep 12, 2016 原文链接:http://antonioleiva.com/recyclerview-diffutil-kotlin/ 如你所知,在[支 ...
- Android RecyclerView 实现支付宝首页效果
Android RecyclerView 实现支付宝首页效果 [TOC] 虽然我本人不喜欢支付宝的,但是这个网格本身其实还是不错的,项目更新中更改了一个布局为网格模式,类似支付宝.(估计是产品抄袭的= ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- 打造android偷懒神器———RecyclerView的万能适配器
转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...
- 安卓v7支持包下的ListView替代品————RecyclerView
RecyclerView这个控件也出来很久了,相信大家也学习的差不多了,如果还没学习的,或许我可以带领大家体验一把这个艺术般的控件. 项目已经同步至github:https://github.com/ ...
随机推荐
- 用sql从一张表更新数据到另外一张表(多表数据迁移)
update TBL_1 A, TBL_2 B, TBL_3 Cset a.email=c.email_addrwhere a.user_id=b.user_id and b.un_id=c.un_i ...
- c# 调用分页(控制器端的)与时间的格式
1.在操作的model中: 2.在控制器中: , command.PageSize);//将从数据库获取到的集合进行分页 var gridModel = new DataSourceResult { ...
- 实现毛玻璃模糊效果/DRNRealTimeBlur
四种方法:1.美工出图 2.coreImage框架,高斯效果 3.ToolBar,覆盖在view上边 //1.添加图片 self.imageView.image = [UIImage imageNa ...
- 7.5 [bx+idata] 书中错误
这节中的问题 7.1 有错误 题目和我自己的注释为: 用 Debug 查看内存,结果如下: 2000:1000 BE 00 06 00 00 00 ... 写出下面程序执行后,ax,bx,cx中的内容 ...
- CSS3中的Transition属性详解(贝赛尔曲线)
transition语法: transition : [<'transition-property'> || <'transition-duration'> || <'t ...
- PHP程序员的技术成长规划(转)
第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟练(核心是安装配置基本操作) 目标:能够完成基本的LNMP系统安装,简单配置维护:能够做基本的简单系统的PHP开发:能够在PHP中型系统中支 ...
- OkHttp使用介绍
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4001708.html 为什么需要一个HTTP库 Androi ...
- Print2flash在.NET(C#)中的使用,即文档在线预览
office文档(word,excel,ppt)在线预览查看,有很多种方式,比如可以 1.调用weboffice组件,进行word预览,要求客户端安装word,仅适用IE, word2013, IE1 ...
- console.log 被重写覆盖以后如何恢复
有时候一些项目中会使用类似如下的方式覆盖掉console对象: var console = {}; console.log = function(){}; console.info = functio ...
- Windows下安装MinGW,编译c/c++时出现cannot find -lpthread解决办法
由于Mingw下没有带pthread库,所以在eclipse中设置多线程动态链接库,也不管用.需要自己下载, ftp://sourceware.org/pub/pthreads-win32/pthre ...