Android-RecylerView控件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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" 3 android:layout_width="match_parent" 4 android:background="#44ff" 5 android:layout_margin="3dp" 6 android:layout_height="match_parent"> 7 <TextView 8 android:id="@+id/id_textView" 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content" 11 android: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 18 private LayoutInflater mInflater = null; 19 private List<String> mDatas = null; 20 public MyAdapter(Context context, List<String> datas) 21 { 22 this.mDatas = datas; 23 this.mInflater = LayoutInflater.from(context); 24 } 25 //创建ViewHolder 26 @Override 27 public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 28 View view = mInflater.inflate(R.layout.item_layout, parent, false); 29 MyViewHolder viewHolder = new MyViewHolder(view); 30 return viewHolder; 31 } 32 //绑定ViewHolder 33 @Override 34 public void onBindViewHolder(MyViewHolder holder, int position) { 35 holder.mTextView.setText(mDatas.get(position)); 36 } 37 38 @Override 39 public int getItemCount() { 40 return mDatas.size(); 41 } 42 class MyViewHolder extends RecyclerView.ViewHolder 43 { 44 public TextView mTextView = null; 45 public MyViewHolder(View itemView) { 46 super(itemView); 47 mTextView = (TextView) itemView.findViewById(R.id.id_textView); 48 } 49 } 50 }
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" 3 android:layout_width="match_parent" 4 android:layout_height="72dp" 5 android:background="#44ff" 6 android:layout_margin="3dp" 7 android:orientation="vertical" > 8 <TextView 9 10 android:id="@+id/id_textView" 11 android:layout_width="match_parent" 12 android:layout_height="match_parent" 13 android:gravity="center" 14 /> 15 16 </FrameLayout>
同时Myadapter上里面定义一个List类型的数组,用来存储每个Item的高度,而初始化List数组是利用随机数来初始化的
1 for(int i = 0; i < mDatas.size(); i++) 2 { 3 mHeights.add((int) (100 + Math.random() * 400)); 4 }
初始化成功后,在onBindVIewHolder中使用
1 //绑定ViewHolder 2 @Override 3 public void onBindViewHolder(MyViewHolder holder, int position) { 4 ViewGroup.LayoutParams layoutParams = holder.mTextView.getLayoutParams(); 5 layoutParams.height = mHeights.get(position); 6 holder.mTextView.setLayoutParams(layoutParams); 7 holder.mTextView.setText(mDatas.get(position)); 8 9 }
6.增加和删除Item的功能
在menu文件下,增加几个Item,将这几个Item加在ActionBar上面
1 <item 2 android:id="@+id/action_add" 3 android:orderInCategory="100" 4 android:showAsAction="ifRoom" 5 android:icon="@drawable/ic_menu_add" 6 android:title="Add"/> 7 <item 8 android:id="@+id/action_delete" 9 android:orderInCategory="100" 10 android:showAsAction="ifRoom" 11 android:icon="@drawable/ic_menu_delete" 12 android:title="Delete"/>
7.为RecylerView添加动画
这个动画是系统给我们的,是系统实现的
1 mRecylerView.setItemAnimator(new DefaultItemAnimator());
以上是关于Android-RecylerView控件的主要内容,如果未能解决你的问题,请参考以下文章
如何在导航控件片段中关闭导航 DrawerLayout onBackPressed
jmeter的Include Controller控件和Test Fragment控件和Module Controller控件
jmeterInclude Controller控件&Test Fragment的使用