標籤:rom group 數組 random dom manage rri pack let
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 //建立ViewHolder26 @Override27 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 //綁定ViewHolder33 @Override34 public void onBindViewHolder(MyViewHolder holder, int position) {35 holder.mTextView.setText(mDatas.get(position));36 }37 38 @Override39 public int getItemCount() {40 return mDatas.size();41 }42 class MyViewHolder extends RecyclerView.ViewHolder43 {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 //綁定ViewHolder2 @Override3 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控制項