Android RecyclerView的使用與添加點擊事件

RecyclerView使用

RecyclerView 是 Android Loillpop (5.0)版本中新添加的一個用來取代 ListView 的 SDK屏箍。

1. 簡介

RecyclerView 與 ListView 原理是類似的:都是僅僅維護少量的View展示大量的數(shù)據(jù)。
  • 使用 LayoutManager 來確定每一個 item 的排列方式嘀掸。
  • 為增加和刪除項目提供默認的動畫效果
關系圖

2. 使用的步驟

2.1 添加依賴

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

2.2 編寫代碼

  • 首先在布局中創(chuàng)建一個 RecyclerView 的布局
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

         <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="45dp"
            android:layout_marginLeft="3dp"
            android:layout_marginRight="3dp"
            android:layout_marginBottom="20dp">
        </android.support.v7.widget.RecyclerView>

    </RelativeLayout>
  • 在 activity 中獲取 RecyclerView 紫岩,綁定 LayoutManager 與 Adapter

      mRecyclerView = (RecyclerView)findViewById(R.id.my_recycler_view);
      //創(chuàng)建默認的線性LayoutManager
      mLayoutManager = new LinearLayoutManager(this);
      mRecyclerView.setLayoutManager(mLayoutManager);
      //如果可以確定每個item的高度是固定的规惰,設置這個選項可以提高性能
      mRecyclerView.setHasFixedSize(true);
      //創(chuàng)建并設置Adapter
      mAdapter = newMyAdapter(getDummyDatas());
      mRecyclerView.setAdapter(mAdapter);
    
  • 創(chuàng)建Adapter

      public class MyAdapter extends RecyclerView.Adapter {
          public String str;
          public MyAdapter(String[] str) {
              this.str = str;
          }
          //創(chuàng)建新View,被LayoutManager所調用
          @Override
          public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
              View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
              ViewHolder vh = new ViewHolder(view);
              return vh;
          }
          //將數(shù)據(jù)與界面進行綁定的操作
          @Override
          public void onBindViewHolder(ViewHolder viewHolder, int position) {
              viewHolder.mTextView.setText(datas[position]);
          }
          //獲取數(shù)據(jù)的數(shù)量
          @Override
          public int getItemCount() {
              return datas.length;
          }
          //自定義的ViewHolder泉蝌,持有每個Item的的所有界面元素
          public static class ViewHolder extends RecyclerView.ViewHolder {
              private TextView mTextView;
              public ViewHolder(View view){
              super(view);
                  mTextView = (TextView) view.findViewById(R.id.text);
              }
          }
      }
    

3. 運行

RecyclerView 最大的特點就是靈活歇万,可以自定義展示方式。

簡單區(qū)分一下布局:
1.mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    這是橫向布局
2. mLayoutManager = new GridLayoutManager(context,columNum);
    mRecyclerView.setLayoutManager(mLayoutManager);
    這是 Grid 布局勋陪。
3. StaggeredGridLayoutManager
    這是瀑布流布局

4. 給 RecyclerView 添加點擊事件

給 RecyclerView 添加點擊事件贪磺,最好是在adapter中添加
其實就是使用觀察者設計模式去寫的,有時間整理一下觀察者設計模式诅愚。
  • 定義一個接口(及定義一個觀察者)寒锚,接口中的方法就是觀察者所感興趣的事件。

       public static interface OnItemClickListener{
          void onItemClick(View v , int position);
      }
    
  • 把這個觀察者先存起來(可以存儲在成員變量中)

      private OnItemClickListener mOnItemClickListener = null;
    
  • 在 onCreateViewHolder 中

      inflate.setOnClickListener(this);
    
  • 在onBindViewHolder 中設置

         holder.itemView.setTag(position);
    
  • 在 adapter中

      @Override
      public void onClick(View v) {
          if(mOnItemClickListener != null){
              //注意這里使用getTag方法獲取數(shù)據(jù)
             mOnItemClickListener.onItemClick(v,(int)v.getTag());
          }
      }
    
         public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) {
              this.mOnItemClickListener = mOnItemClickListener;
          }
    
  • 在 activity 中

      pendingWorkAdapter.setOnItemClickListener(new PendingWorkAdapter.OnItemClickListener() {
          @Override
          public void onItemClick(View v, int position) {
              Intent intent = new Intent(getActivity(), PendingInformationActivity.class);
              startActivityForResult(intent,REQUEST_PENDINGINFORMATION);
          }
      });
    

ok,已經(jīng)可以使用RecyclerView了。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刹前,一起剝皮案震驚了整個濱河市泳赋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喇喉,老刑警劉巖祖今,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拣技,居然都是意外死亡千诬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門膏斤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徐绑,“玉大人,你說我怎么就攤上這事莫辨”萌” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵衔掸,是天一觀的道長烫幕。 經(jīng)常有香客問我,道長敞映,這世上最難降的妖魔是什么较曼? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮振愿,結果婚禮上捷犹,老公的妹妹穿的比我還像新娘。我一直安慰自己冕末,他們只是感情好萍歉,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著档桃,像睡著了一般枪孩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上藻肄,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天蔑舞,我揣著相機與錄音,去河邊找鬼嘹屯。 笑死攻询,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的州弟。 我是一名探鬼主播钧栖,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼低零,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拯杠?” 一聲冷哼從身側響起毁兆,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎阴挣,沒想到半個月后气堕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡畔咧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年茎芭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誓沸。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡梅桩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拜隧,到底是詐尸還是另有隱情宿百,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布洪添,位于F島的核電站垦页,受9級特大地震影響,放射性物質發(fā)生泄漏干奢。R本人自食惡果不足惜痊焊,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忿峻。 院中可真熱鬧薄啥,春花似錦、人聲如沸逛尚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绰寞。三九已至到逊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間克握,已是汗流浹背蕾管。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留菩暗,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓旭蠕,卻偏偏與公主長得像停团,于是被迫代替她去往敵國和親旷坦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容