zoukankan      html  css  js  c++  java
  • Android学习之RecyclerView

    RecyclerView是android-support-v7-21版本号中新增的一个Widget,官方介绍RecyclerView 是 ListView 的升级版本号,更加先进和灵活。


    开发环境

     - IDE: ADT
     - SDK: Android L


    首先在Android SDK Manager上下载Android Support Repository,


    它会在sdk/extras/android文件夹下生成m2repository文件夹,


    进入RecycleView文件夹。用解压文件打开recyclerview-v7-21.0.0-rc1.aar文件,将claaes.jar改名后放入lib文件夹。



    假设想在ADT中关联源码,能够在libs下新建文件
    recycleview.jar.properties 
    编辑
    src=D:\adt-bundle-windows-x86_64-20131030\sdk\extras\android\m2repository\com\android\support\recyclerview-v7\21.0.0-rc1\recyclerview-v7-21.0.0-rc1-sources.jar

    右键项目close project,然后open project这样就能够关联源码了。


    创建项目如图



    布局文件里使用 RecyclerView

    <?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.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </RelativeLayout>

    Activity中

    package com.leigo.recyclerview;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    
    /**
     * @ClassName RecyclerViewActivity
     * @Description TODO
     * @author GaoLei
     * @date 2014-7-2
     */
    public class RecyclerViewActivity extends Activity {
    
    	private static final String TAG = RecyclerViewActivity.class
    			.getSimpleName();
    
    	private RecyclerView mRecyclerView;
    
    	/**
    	 * @Method: onCreate
    	 * @Description: TODO
    	 * @param savedInstanceState
    	 * @see android.app.Activity#onCreate(android.os.Bundle)
    	 */
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_recycle_view);
    
    		mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    
    		LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    //		layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    		// 设置布局管理器
    		mRecyclerView.setLayoutManager(layoutManager);
    
    		String[] dataset = new String[100];
    		for (int i = 0; i < dataset.length; i++) {
    			dataset[i] = "item" + i;
    		}
    		RecyclerAdapter mAdapter = new RecyclerAdapter(dataset);
    		mRecyclerView.setAdapter(mAdapter);
    	}
    
    }<strong>
    </strong>


    RecyclerView 一个特点就是,将 layout 抽象成了一个 LayoutManager,RecylerView 不负责子 View 的布局, 我们能够自己定义 LayoutManager 来实现不同的布局效果, 眼下仅仅提供了LinearLayoutManager。 LinearLayoutManager 能够指定方向,默认是垂直, 能够指定水平, 这样就轻松实现了水平的 ListView。


    Adapter

    package com.leigo.recyclerview;
    
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.RecyclerView.Adapter;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    /**
     * @ClassName RecyclerAdapter
     * @Description TODO
     * @author GaoLei
     * @date 2014-7-2
     */
    public class RecyclerAdapter extends Adapter<RecyclerAdapter.ViewHolder> {
    	private String[] mDataset;
    
    	/**
    	 * @Description: TODO
    	 */
    	public RecyclerAdapter(String[] dataset) {
    		mDataset = dataset;
    	}
    
    	public static class ViewHolder extends RecyclerView.ViewHolder {
    
    		public TextView mTextView;
    
    		/**
    		 * @Description: TODO
    		 * @param itemView
    		 */
    		public ViewHolder(View itemView) {
    			super(itemView);
    			mTextView = (TextView) itemView;
    		}
    	}
    
    	/**
    	 * @Method: getItemCount
    	 * @Description: TODO
    	 * @return
    	 * @see android.support.v7.widget.RecyclerView.Adapter#getItemCount()
    	 */
    	@Override
    	public int getItemCount() {
    		return mDataset.length;
    	}
    
    	/**
    	 * @Method: onBindViewHolder
    	 * @Description: TODO
    	 * @param holder
    	 * @param position
    	 * @see android.support.v7.widget.RecyclerView.Adapter#onBindViewHolder(android.support.v7.widget.RecyclerView.ViewHolder,
    	 *      int)
    	 */
    	@Override
    	public void onBindViewHolder(ViewHolder holder, int position) {
    		holder.mTextView.setText(mDataset[position]);
    	}
    
    	/**
    	 * @Method: onCreateViewHolder
    	 * @Description: TODO
    	 * @param parent
    	 * @param viewType
    	 * @return
    	 * @see android.support.v7.widget.RecyclerView.Adapter#onCreateViewHolder(android.view.ViewGroup,
    	 *      int)
    	 */
    	@Override
    	public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    		View view = View.inflate(parent.getContext(),
    				android.R.layout.simple_list_item_1, null);
    		ViewHolder holder = new ViewHolder(view);
    		return holder;
    	}
    }
    

    RecyclerView 的还有一个特点是标准化了 ViewHolder, 编写 Adapter 面向的是 ViewHoder 而不在是View 了, 复用的逻辑被封装了, 写起来更加简单。


    截图




  • 相关阅读:
    [转]Git忽略规则及.gitignore规则不生效的解决办法
    动漫(杂)
    《计算机图形学》2.5 ~ 2.7 学习笔记
    《计算机图形学》2.4 输入设备 学习笔记
    《计算机图形学》2.2.2 光栅扫描显示处理器
    Android 使用版本控制工具时添加忽略文件方式
    devexpress表格控件gridcontrol设置隔行变色、焦点行颜色、设置(改变)显示值、固定列不移动(附源码)
    详解shape标签
    以向VS 程序打包集成自动写入注册表功能为例,介绍如何实现自由控制安装过程
    C#组件系列——又一款Excel处理神器Spire.XLS,你值得拥有
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4055070.html
Copyright © 2011-2022 走看看