android开发步步为营之85:RecyclerView简单使用

来源:互联网 发布:抢票软件收费 编辑:程序博客网 时间:2024/06/02 00:07

       最近项目里优化的时候,之前使用GridView和ListView的,然后统一改成了RecyclerView,发现性能能提升不少,左右滑动的时候,比之前更顺畅,从字面意思来看:可回收的View,自然对提升性能方面会比较好,还没仔细研究源码,这里给出简单使用,供大家参考,其实有了这个view,GridView和ListView可以不用了。它都能实现,好,贴出代码。

       第一步:引入相关的依赖

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile files('src/main/libs/universal-image-loader-1.9.3.jar')    compile 'com.android.support:support-v4:22.2.1'    compile 'com.android.support:recyclerview-v7:22.2.0'}

      第二步:设计相关页面

activity页面activity_recycler_view.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:background="#c5efc6"    tools:context="com.figo.study.activity.RecyclerViewActivity">    <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"        android:id="@+id/recyclerView_test"        android:layout_width="match_parent"        android:layout_height="match_parent" /></RelativeLayout>

RecyclerView头部layout_rv_head.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:background="#ffffff"    android:layout_width="match_parent" android:layout_height="match_parent"    android:gravity="center"    android:layout_marginBottom="10dp"><TextView    android:id="@+id/tv_title"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="相冊"/></LinearLayout>


RecyclerView数据项layout_rv_item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content">    <LinearLayout        android:id="@+id/layoutContent"        android:background="#ffffff"        android:layout_width="match_parent"        android:layout_height="wrap_content">        <ImageView            android:id="@+id/img_icon"            android:layout_width="match_parent"            android:layout_height="100dp"            android:src="@mipmap/ic_launcher"            android:scaleType="fitXY" />    </LinearLayout></LinearLayout>

        第三步:编写Activity RecyclerViewActivity.java

package com.figo.study.activity;import android.app.Activity;import android.os.Bundle;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.figo.study.R;import com.figo.study.utils.CommonUtil;import java.util.ArrayList;public class RecyclerViewActivity extends Activity {    RecyclerView mRecyclerView;    PhotoAdapter mPhotoAdapter;    ArrayList<Integer> imgs = null;    int rvHead = 0;    int rvItem = 1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_recycler_view);        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView_test);        bindDataToRv();    }    private void bindDataToRv() {        //测试,使用系统自带的图标        imgs = new ArrayList<Integer>();        for (int a = 0; a < 100; a++) {            imgs.add(R.mipmap.ic_launcher);        }        //一、实现GridView效果,两列,第一列合并        GridLayoutManager gridLayoutMgr = new GridLayoutManager(this, 2);        //第一行,两列合并为一列,作为标题        gridLayoutMgr.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {            @Override            public int getSpanSize(int position) {                if (position == 0) {                    return 2;                }                return 1;            }        });        mRecyclerView.setLayoutManager(gridLayoutMgr);        //二、实现ListView效果        /*        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);        mRecyclerView.setLayoutManager(linearLayoutManager);        */        //三、实现交错效果 (5,StaggeredGridLayoutManager.VERTICAL)表示显示5列,更多数据上下滑动        // (5,StaggeredGridLayoutManager.HORIZONTAL) 表示显示5行,更多数据左右滑动//        StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(5,StaggeredGridLayoutManager.HORIZONTAL);//        mRecyclerView.setLayoutManager(staggeredGridLayoutManager);        if (mPhotoAdapter == null) {            mPhotoAdapter = new PhotoAdapter();        }        //数据绑定到RecyclerView        mRecyclerView.setAdapter(mPhotoAdapter);    }    class PhotoAdapter extends RecyclerView.Adapter<PhotoAdapter.PhotoViewHolder> {        @Override        public PhotoViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {            PhotoViewHolder holder = null;            //根据view类型选择不同的加载项            if (viewType == rvHead) {                holder = new PhotoViewHolder(LayoutInflater.from(RecyclerViewActivity.this).inflate(R.layout.layout_rv_head, parent,                        false), true);            } else {                holder = new PhotoViewHolder(LayoutInflater.from(RecyclerViewActivity.this).inflate(R.layout.layout_rv_item, parent,                        false), false);            }            return holder;        }        @Override        public void onBindViewHolder(PhotoViewHolder holder, int position) {            if (position == 0) {                holder.tvTitle.setText("This is Photo Album");            } else {                //设置RecyclerView横竖间距                //Gridview效果                LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) holder.layoutContent.getLayoutParams();                if (position % 2 == 0) {                 layoutParams.setMargins(CommonUtil.dp2px(10, RecyclerViewActivity.this), 0, CommonUtil.dp2px(10, RecyclerViewActivity.this), CommonUtil.dp2px(10, RecyclerViewActivity.this));                 } else {                 layoutParams.setMargins(CommonUtil.dp2px(10, RecyclerViewActivity.this), 0, 0, CommonUtil.dp2px(10, RecyclerViewActivity.this));                 }                 holder.layoutContent.setVisibility(View.VISIBLE);                //ListView效果//                layoutParams.setMargins(0, 0, 0, CommonUtil.dp2px(10, RecyclerViewActivity.this));                //设置图片                holder.imgIcon.setImageResource(imgs.get(position - 1));//因为第一项是title            }        }        //返回view类型        @Override        public int getItemViewType(int position) {            if (position == 0) {                return rvHead;            } else {                return rvItem;            }        }        @Override        public int getItemCount() {            return imgs.size() + 1;//第一项是title,需要多加一项        }        class PhotoViewHolder extends RecyclerView.ViewHolder {            ImageView imgIcon;            TextView tvTitle;            LinearLayout layoutContent;            public PhotoViewHolder(View view, boolean isHead) {                super(view);                if (isHead) {                    tvTitle = (TextView) view.findViewById(R.id.tv_title);                } else {                    layoutContent = (LinearLayout) view.findViewById(R.id.layoutContent);                    imgIcon = (ImageView) view.findViewById(R.id.img_icon);                }            }        }    }}


       

2 0
原创粉丝点击