Android開發之RecyclerView控制項_Android

來源:互聯網
上載者:User

現階段,我們建立了最簡單的Android項目,現在在此公布github連結https://github.com/neuyu/android-best-practices,希望大家多多支援。

因為之前談到過包結構的定義,我選擇第一種方式,按照Android特性定義,所以你的包結構應該是這樣的:

RecyclerView

在MainActivity中,我們需要用到RecyclerView這一新控制項,那麼如何引用,如何使用它呢?在gradle檔案中添加庫依賴:

compile 'com.android.support:recyclerview-v7:23.1.1'

這樣我們可以使用RecyclerView啦。

RecyclerView的用法

那麼好了,recyclerView是一個控制項,所以你需要在xml中進行聲明,當然其也支援在Java代碼中動態構建。

通過執行個體化後,你需要為其設定layoutManager和adapter。

關於layoutManager,用來確定每一個item如何進行排列擺放,何時展示和隱藏。回收或重用一個View的時候,LayoutManager會向適配器請求新的資料來替換舊的資料,這種機制避免了建立過多的View和頻繁的調用findViewById方法(與ListView原理類似)。

目前SDK中提供了三種內建的LayoutManager:

  1. LinearLayoutManager
  2. GridLayoutManager
  3. StaggeredGridLayoutManager

基於原型圖:

LinearLayoutManager的效果圖如下:

GridLayoutManager的效果圖如下所示:

關於adapter

我們使用到了CardView,而其也是v7包裡單獨存在的,所以你需要在gradle檔案中申明:

compile 'com.android.support:cardview-v7:23.1.1'

注意每個cardView都是一個item,類似於listview,因此你可以為CardView添加自訂布局。如下所示:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"                  xmlns:card_view="http://schemas.android.com/apk/res-auto"                  xmlns:tools="http://schemas.android.com/tools"                  android:id="@+id/list_card_view"                  style="@style/cardStyle"                  android:clickable="true"                  android:foreground="?android:attr/selectableItemBackground"                  card_view:cardCornerRadius="4dp"                  card_view:cardElevation="4dp">  <RelativeLayout    style="@style/cardRelativeLayoutStyle"    tools:ignore="UselessParent">    <TextView      android:id="@+id/itemText"      style="@style/cardItem"/>  </RelativeLayout></android.support.v7.widget.CardView>

對應的adapter需要繼承RecycleView.Adapter,其為泛型,需要傳入你自訂的ViewHolder。所以你也需要定義你的靜態內部類,讓其繼承RecycleView.ViewHolder,並且RecycleView並沒有相關itemClick點擊事件,所以你需要在靜態類中定義點擊事件,具體如下所示:

public class CardViewAdapter extends RecyclerView.Adapter<CardViewAdapter.CardViewHolder>{    public CardViewAdapter(List<ItemTest> list, Context context){    mList=list;    mContext=context;  }  @Override  public CardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {    View item= LayoutInflater.from(mContext).inflate(R.layout.adapter_item,parent,false);    return new CardViewHolder(item, new CardViewHolder.ClickListener() {      @Override      public void onWholeClick(int position) {        redirectToDetail(position);      }    });  }   public static class CardViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{     public CardViewHolder(View itemView,ClickListener clickListener) {       super(itemView);       this.mClickListener=clickListener;       list_card_view=(CardView)itemView.findViewById(R.id.list_card_view);       list_card_view.setOnClickListener(this);  }   public interface ClickListener{      void onWholeClick(int position);  }  }}

關於RecycleView和CardView的相關特性和深入理解,將會在下一篇介紹。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.