Android-RecylerView控制項

來源:互聯網
上載者:User

標籤: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控制項

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.