文档章节

Android RecyclerView简单运用

开源中国首席院长
 开源中国首席院长
发布于 2015/05/23 17:50
字数 727
阅读 270
收藏 4

什么是RecyclerView?个人理解,它是一个在数据量大的时候,为了显示在界面上提供的灵活高效处理的控件。可以替代listview,gallery,gridview等控件。( 这个是复制的,可以忽略。。。)

因为这个是在android 在2014 的goole io大会说的,所以呢整个sdk 最起码更新到 21版本吧。

这样才有android-support-v7-recyclerview.jar  这个包。

看下项目结构

下面就简单的上代码了

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"
    tools:context="com.ngh.recucler.MainActivity" >

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

list_item.xml

<?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"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp" />

</RelativeLayout>

MainActivity.java

package com.ngh.recucler;

import java.util.ArrayList;

import com.ngh.recucler.adapter.RecyleAdapter;
import com.ngh.recucler.adapter.RecyleAdapter.OnRecyclerViewItemClickListener;

import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.OnItemTouchListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

/**
 * 测试界面
 * 
 * @author ngh
 *
 *         2015年5月23日
 */
public class MainActivity extends Activity {
	private RecyclerView recycle;
	private RecyleAdapter adapter;
	private ArrayList<String> list = new ArrayList<String>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		recycle = (RecyclerView) findViewById(R.id.recycle);

		LinearLayoutManager manager = new LinearLayoutManager(this);
		manager.setOrientation(LinearLayoutManager.VERTICAL); // 横滑,还是竖滑
		recycle.setLayoutManager(manager); // 设置布局管理器
		initData();
		adapter = new RecyleAdapter(list, this);
		recycle.setAdapter(adapter);

		/* 设置单个item 的点击事件 */
		adapter.setListener(new OnRecyclerViewItemClickListener() {

			@Override
			public void onClick(View view, int position) {
				Toast.makeText(getBaseContext(), list.get(position), 0).show();

			}
		});

		/**
		 * 绘制listView 的间隔线
		 */
		recycle.addItemDecoration(new RecyclerView.ItemDecoration() {
			Paint paint = new Paint();

			@Override
			public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
				super.onDraw(c, parent, state);
			}

			@Override
			public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
				super.onDrawOver(c, parent, state);
				paint.setColor(Color.LTGRAY);
				for (int i = 0, size = parent.getChildCount(); i < size; i++) {
					View child = parent.getChildAt(i);
					c.drawLine(child.getLeft(), child.getBottom(), child.getRight(), child.getBottom(), paint);
				}
			}

		});
		// 可以提高效率
		recycle.setHasFixedSize(true);

	}

	/**
	 * 添加测试数据
	 */
	private void initData() {
		for (int i = 0; i < 1000; i++) {
			list.add("这是测是数据。。。" + i);

		}
	}
}

RecyleAdapter.java

package com.ngh.recucler.adapter;

import java.util.ArrayList;

import com.ngh.recucler.R;
import com.ngh.recucler.R.drawable;
import com.ngh.recucler.R.id;
import com.ngh.recucler.R.layout;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * RecyclerView 的适配Adapter
 * @author ngh
 *
 * 2015年5月23日
 */
public class RecyleAdapter extends RecyclerView.Adapter<RecyleAdapter.ViewHolder> {

	private ArrayList<String> list;
	private Context context;

	public RecyleAdapter(ArrayList<String> list, Context context) {
		super();
		this.list = list;
		this.context = context;
	}

	// 点击监听事件  此处必须设置public  后期考虑到分包的问题
	public interface OnRecyclerViewItemClickListener {
		void onClick(View view, int position);
	};

	private OnRecyclerViewItemClickListener listener;

	// 设置监听器
	public void setListener(OnRecyclerViewItemClickListener listener) {
		this.listener = listener;
	}

	@Override
	public int getItemCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	/**
	 * 数据展示
	 */
	@Override
	public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
		// TODO Auto-generated method stub
		viewHolder.tv.setText(list.get(i));
		
		/*item  的点击事件创建*/
		viewHolder.itemView.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(listener!=null){
					 listener.onClick(viewHolder.itemView, i);
				}
				
			}
		});

	}

	@Override
	public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
		// TODO Auto-generated method stub
		View view = LinearLayout.inflate(context, R.layout.list_item, null);
		ViewHolder viewHolder = new ViewHolder(view);

		return viewHolder;
	}

	class ViewHolder extends RecyclerView.ViewHolder {
		private ImageView iv;
		private TextView tv;

		public ViewHolder(View itemView) {
			super(itemView);
			iv = (ImageView) itemView.findViewById(R.id.iv);
			tv = (TextView) itemView.findViewById(R.id.tv);
		}

	}

}

效果图:(图片不好,将就看吧)

© 著作权归作者所有

开源中国首席院长
粉丝 8
博文 5
码字总数 3075
作品 0
洛阳
Android工程师
私信 提问
Android RecyclerView: Super Fast ListView 超级快速的Lis

Android RecyclerView: Super Fast ListView 原文来自我的微信公众号: longkai_1991 先上图,看效果: 前几天刚release完公司的一个项目,有了点时间,于是就想找一些有意思的东西学习一下,...

龙凯
2014/09/01
0
2
Android 5.0+(RecycleView、CardView、Palette)

Android L 开发者预览支持库提供两个新的Widgets,RecyclerView和CardView。使用这两个Widgets可以显示复杂的Listview和卡片布局,这两个Widgets默认使用Material design。 RecyclerView R...

让代码飞一会
2015/07/27
0
0
Android开发过程中的坑及解决方法收录

  1.某个控件要放在Linearlayout布局的底部(底部导航条)      <LinearLayout      android:layoutwidth="matchparent"      android:orientation="vertical"      andro......

SEOwhywhy
2018/12/08
0
0
Airbnb开源框架,真响应式架构——MvRx,Epoxy

> Airbnb开源框架,真响应式架构——MvRx Airbnb开源框架,真响应式架构——MvRx- https://mp.weixin.qq.com/s/pttfFzkAO5MnwscXDX-dDw Airbnb开源框架,真响应式架构——MvRx: https://gi...

desaco
02/28
0
0
RecyclerView、NestedScrollView嵌套子RecyclerView焦点抢夺引起子元素显示位置异常

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/82626837 RecyclerView、NestedScrollView嵌套子RecyclerView焦点抢夺引起子元素显示位...

zhangphil
2018/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

texlive安装

Installing to: D:/bin/texlive/texlive/2019Installing [001/307, time/total: ??:??/??:??]: adobemapping [2130k]Installing [002/307, time/total: 00:03/08:57]: ae [84k]Installing......

MtrS
43分钟前
2
0
运维规范

命名规范 发布流程 监控告警 故障定位 状态 日志 监控

以谁为师
今天
2
0
约瑟夫环(报数游戏)java实现

开端 公司组织考试,一拿到考题,就是算法里说的约瑟夫环,仔细想想 以前老师将的都忘了,还是自己琢磨把~ package basic.gzy;import java.util.Iterator;import java.util.LinkedList;...

无极之岚
今天
3
0
Kernel字符设备驱动框架

Linux设备分为三大类:字符设备,块设备和网络设备,这三种设备基于不同的设备框架。相较于块设备和网络设备,字符设备在kernel中是最简单的,也是唯一没有基于设备基础框架(device结构)的...

yepanl
今天
3
0
Jenkins 中文本地化的重大进展

本文首发于:Jenkins 中文社区 我从2017年开始,参与 Jenkins 社区贡献。作为一名新成员,翻译可能是帮助社区项目最简单的方法。 本地化的优化通常是较小的改动,你无需了解项目完整的上下文...

Jenkins中文社区
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部