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
- android开发步步为营之85:RecyclerView简单使用
- android开发步步为营之18:闹钟AlarmManager的使用
- android开发步步为营之44:使用WebView打开web页面
- Android之RecyclerView简单使用(一)
- Android之RecyclerView简单使用(二)
- Android之RecyclerView简单使用(三)
- Android之RecyclerView简单使用(完结篇)
- android学习之RecyclerView的简单使用
- android开发步步为营之71:CoordinatorLayout+AppBarLayout+RecyclerView+ViewPager打造可上下左右滑动的App主框架
- android开发步步为营之9:反编译apk
- android开发步步为营之14:App Widgets
- android开发步步为营之20:网络设置
- android开发步步为营之28:自定义Menu
- Android开发之RecyclerView的使用
- Android 开发之RecyclerView的使用
- Android RecyclerView简单使用
- android recyclerView简单使用
- android开发步步为营之100:开源项目SlidingUpPanelLayout简单用法
- Google code jam2015 Qualified Round
- svn 出现cleanup失败的修复
- iOS开发之UIWindow
- c++11 async启动异步任务的使用方法
- LeetCode 之 House Robber
- android开发步步为营之85:RecyclerView简单使用
- Layout Optimization布局优化工具
- 做星星评级的一个demo,转载大神的
- 偶然发现的一个页面加载缓冲特效 sonic
- java获取某日期之前/之后一天的日期(实现代码)
- java中多态的前提条件,与静态绑定方法混淆
- Machine Learning week 8 quiz: Principal Component Analysis
- Cassandra 总结3
- poj3370Halloween treats【抽屉原理】