亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Android-RecylerView控件相关的知识,希望能为你提供帮助。
RecylerView是android5.0推出的新控件,相较于ListView和GridView,RecylerView有以下几个特点:
1、不关心Item是否显示在正确的位置上,如何显示。利用LayoutManager来控制RecylerView的显示风格
2、不关心Item之间如何分割。 利用ItemDecoration来设置分割线的效果
3、不关心Item增加与删除的动画效果。利用ItemAnimator来控制动画效果
4、仅仅关注如何回收和复用View。
在RecyLerView中,强制我们使用ViewHolder的模式,这一点要记得。
1.建立布局文件
A、建立每个Item的布局
1 < ?xml version="1.0" encoding="utf-8"?> 2 < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3android:layout_width="match_parent" 4android:background="#44ff" 5android:layout_margin="3dp" 6android:layout_height="match_parent"> 7< TextView 8android:id="@+id/id_textView" 9android:layout_width="match_parent" 10android:layout_height="wrap_content" 11android:gravity="center" 12/> 13 < /LinearLayout>
B、建立主布局
< ?xml version="1.0" encoding="utf-8"?> < RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.android_recylerview.MainActivity"> < android.support.v7.widget.RecyclerView android:id="@+id/id_recylerView" android:layout_width="match_parent" android:layout_height="match_parent"/> < /RelativeLayout>
2.实现RecylerView的Adapter
1 package com.example.android_recylerview; 2 3 import android.content.Context; 4 import android.support.v7.widget.RecyclerView; 5 import android.view.LayoutInflater; 6 import android.view.View; 7 import android.view.ViewGroup; 8 import android.widget.TextView; 9 10 import java.util.List; 11 12 /** 13* Created by 前世诀别的一纸书 on 2017/2/23. 14*/ 15 16 public class MyAdapter extends RecyclerView.Adapter< MyAdapter.MyViewHolder> { 17 18private LayoutInflater mInflater = null; 19private List< String> mDatas = null; 20public MyAdapter(Context context, List< String> datas) 21{ 22this.mDatas = datas; 23this.mInflater = LayoutInflater.from(context); 24} 25//创建ViewHolder 26@Override 27public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 28View view = mInflater.inflate(R.layout.item_layout, parent, false); 29MyViewHolder viewHolder = new MyViewHolder(view); 30return viewHolder; 31} 32//绑定ViewHolder 33@Override 34public void onBindViewHolder(MyViewHolder holder, int position) { 35holder.mTextView.setText(mDatas.get(position)); 36} 37 38@Override 39public int getItemCount() { 40return mDatas.size(); 41} 42class MyViewHolder extends RecyclerView.ViewHolder 43{ 44public TextView mTextView = null; 45public MyViewHolder(View itemView) { 46super(itemView); 47mTextView = (TextView) itemView.findViewById(R.id.id_textView); 48} 49} 50 }
【Android-RecylerView控件】4.在MainActivity中使用RecylerView
//设置布局管理 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL, false); // LinearLayout的布局 GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 4); // GridView的布局 StaggeredGridLayoutManager gridLayoutManager1 = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.HORIZONTAL); // 水平的GridView的布局 mRecylerView.setLayoutManager(gridLayoutManager1); //设置分割线 //mRecylerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
5.将GridView变为瀑布流
以下的代码是在eclipse上实现的,我没在Android studio 上实现成功。。。。
1 < ?xml version="1.0" encoding="utf-8"?> 2 < FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3android:layout_width="match_parent" 4android:layout_height="72dp" 5android:background="#44ff" 6android:layout_margin="3dp" 7android:orientation="vertical" > 8< TextView 9 10android:id="@+id/id_textView" 11android:layout_width="match_parent" 12android:layout_height="match_parent" 13android:gravity="center" 14/> 15 16 < /FrameLayout>
同时Myadapter上里面定义一个List类型的数组,用来存储每个Item的高度,而初始化List数组是利用随机数来初始化的
1for(int i = 0; i < mDatas.size(); i++) 2{ 3mHeights.add((int) (100 + Math.random() * 400)); 4}
初始化成功后,在onBindVIewHolder中使用
1//绑定ViewHolder 2@Override 3public void onBindViewHolder(MyViewHolder holder, int position) { 4ViewGroup.LayoutParams layoutParams = holder.mTextView.getLayoutParams(); 5layoutParams.height = mHeights.get(position); 6holder.mTextView.setLayoutParams(layoutParams); 7holder.mTextView.setText(mDatas.get(position)); 8 9}
6.增加和删除Item的功能
在menu文件下,增加几个Item,将这几个Item加在ActionBar上面
1 < item 2android:id="@+id/action_add" 3android:orderInCategory="100" 4android:showAsAction="ifRoom" 5android:icon="@drawable/ic_menu_add" 6android:title="Add"/> 7< item 8android:id="@+id/action_delete" 9android:orderInCategory="100" 10android:showAsAction="ifRoom" 11android:icon="@drawable/ic_menu_delete" 12android:title="Delete"/>
7.为RecylerView添加动画
这个动画是系统给我们的,是系统实现的
1 mRecylerView.setItemAnimator(new DefaultItemAnimator());
推荐阅读
- 安卓四大组件
- Android自定义View之LoadingLayout
- Android的Fragment的自定义转场动画
- Android N特性解析
- 安卓界面组件-文本框
- 基于ksoap2-android的soap的封装
- Android学习笔记(十七) BroadcastReceiver
- Android EditText中输入价格判断
- Android开发之Fragment的替换显示