国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

RecyclerView使用詳解(代替ListView)

2019-10-22 18:21:21
字體:
來源:轉載
供稿:網友

老規矩,先看效果;

RecyclerView,ListView

Recycler是android5.0版本中新添加的一個view;
使用之前必須添加依賴庫:

dependencies {  compile 'com.android.support:recyclerview-v7:23.0.+' } 

這里我就不再過多的介紹RecyclerView,既然大家在找使用RecyclerView的demo想必大家都了解過了,如果不了解網上隨便打開一篇RecyclerView的文章應該都有,已經爛大街,在此就不過多的重復了;

今天寫的demo主要是利用RecyclerView代替普通的listview和橫向的listview;
個人感覺要想更深入的使用RecyclerView,必須要從最基礎的功能開始實現;今天我們就實現最簡單的五點功能:
功能點:為RecyclerView添加點擊事件,添加頭布局和腳布局,添加下拉刷新和上拉加載更多;

好了首先說下如何用RecyclerView代替橫向的listview:
RecyclerView的使用個人感覺其實比較簡單,但是網上很多demo介紹的感覺有點復雜,在本文中RecyclerView的基本使用只需兩步:

第一:設置布局管理器

第二:設置adapter

//添加布局管理器,Orientation默認是縱向的,所以我們在此需要手動指定一下 LinearLayoutManager layoutManager = new LinearLayoutManager(context); layoutManager.setOrientation(OrientationHelper.HORIZONTAL); recyclerView.setLayoutManager(layoutManager);  //設置recyclerView標記,如果確定內容的高度都一致,設置為true,提高內容渲染效率;(如果高度不確定系統要自己適配高度) recyclerView.setHasFixedSize(true);  //設置adapter HRecyclerViewAdapter adapter = new HRecyclerViewAdapter(context, images); recyclerView.setAdapter(adapter); 

RecyclerVIew提供了三種內置的布局管理器:
LinearLayoutManager:線性布局,橫向或者縱向滑動列表
GridLayoutManager:表格布局
StaggeredGridLayoutManager:流式布局
我們今天只使用第一種,先了解最實用,最基礎的,后期會更新

RecyclerView默認是沒有分割線的,網上很多demo為了給RecyclerView添加分割線使用了系統提供的類;
個人感覺完全沒必要,甚至感覺多次一舉,個人感覺完全可以給RecyclerView和item設置背景實現分割線或者在item布局中添加view布局實現;

首先了解下RecyclerView的adapter:

和listview的adapter有所不同,在這里需要繼承RecyclerView.Adapter,需要實現三個方法:
onCreateViewHolder()
onBindViewHolder()
getItemCount()

詳情看代碼:

public class HRecyclerViewAdapter extends RecyclerView.Adapter<HRecyclerViewAdapter.MyViewHolder>{   private Context context;  private int[] images;  private OnItemClickListener onItemClickListener;   public HRecyclerViewAdapter(Context context, int[] images) {  this.context=context;  this.images=images;  }   //重寫onCreateViewHolder方法,返回一個自定義的ViewHolder(當RecyclerView需要一個ViewHolder時會回調該方法,如果有可復用的View不會回調)  public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  View view = LayoutInflater.from(context).inflate(R.layout.item_hrecycler, parent, false);  MyViewHolder myViewHolder = new MyViewHolder(view);  return myViewHolder;  }    //填充onCreateViewHolder方法返回的holder中的控件(當一個View需要出現在屏幕上時,該方法會被回調,我們需要再該方法中根據數據來更改視圖)  public void onBindViewHolder(final MyViewHolder holder, int position) {  holder.iv.setBackgroundResource(images[position]);  if(onItemClickListener!=null){  holder.itemView.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {   int index = holder.getLayoutPosition();   //自定義監聽第三步   onItemClickListener.onItemClick(index);  }  });  }  }   //獲取數據的數量(告訴RecyclerView有多少個視圖需要顯示)  public int getItemCount() {  return images.length;  }   //自定義的ViewHolder,持有每個Item的的所有界面元素  public class MyViewHolder extends RecyclerView.ViewHolder{   public ImageView iv;   public MyViewHolder(View itemView) {  super(itemView);  iv= (ImageView) itemView.findViewById(R.id.imageview);  }  }   //自定義監聽第二步  public void setOnItemClickListener(OnItemClickListener onItemClickListener){  this.onItemClickListener=onItemClickListener;  }   //自定義監聽第一步  public interface OnItemClickListener{  void onItemClick(int position);  }  } 

從代碼中大家可以了解到RecyclerView的adpater其實只需要實現三個方法,但是我這個adapter中卻多出來幾個方法,RecyclerView本身是沒有條目點擊事件的,所以多出來的幾個方法是變相的給RecyclerView設置設置條目點擊事件的,實際上是使用自定義監聽給adapter設置了點擊事件;
自定義監聽就不再過多介紹了,以前寫的博客中有專門介紹自定義監聽的,不了解的朋友可以了解一下SwipeRefreshLayout實現ListView下拉刷新上拉加載

給RecyclerView設置adapter之后就可以使用了:

adapter.setOnItemClickListener(new HRecyclerViewAdapter.OnItemClickListener() {  @Override  public void onItemClick(int position) {  ToastUtils.showStaticToast(context,"當前點擊的是第"+(position+1)+"張圖片");  }  }); 

好了接下來了解下RecyclerView代替縱向listview:
分割線和上面一樣,在item中添加view實現分割線,點擊事件同樣是添加自定義監聽;
RecyclerView默認是沒辦法添加頭布局和腳布局的,上面橫向的沒有使用這一塊,但是縱向的在真實項目中就極有可能使用到這個功能點了,在網上看了好多大神們寫的添加頭布局和腳布局的方法,感覺真的是大神,寫的真的很復雜,所以都沒有使用,最后在git上找到一個自定義的RecyclerView直接繼承系統的RecyclerView,除了添加了兩個方法,其他的用法不變,感覺挺實用的,在此就不復制這個類了,源碼中都有(MyRecyclerView),使用的話直接復制到項目中即可;
添加頭布局和腳布局的方法也極為簡單,和listview一樣:

//添加頭布局(必須在設置完布局管理器再添加頭布局和腳布局)  View headerView = View.inflate(this, R.layout.headerview, null);  myRecyclerView.addHeaderView(headerView);  //添加腳布局  View footView = View.inflate(context, R.layout.footview, null);  myRecyclerView.addFooterView(footView); 

下拉刷新直接使用的是系統自帶的SwipeRefreshLayout,這個在以前的博客中也有介紹,在此就不再重復了,不了解的朋友可以了解一下
Android自定義ScrollView使用自定義監聽

好了,剩下最后一個功能點,上拉加載更多:
直接給RecyclerView添加活動監聽和添加腳布局實現,首先得到當前頁面顯示的條目個數,adapter一共多少個條目,和當前布局遮擋頁面個數
先求出用頁面實現個數+被頁面遮擋條目個數的和,然后拿這個和和adapter總條目個數做比較,當等于或者大于adapter條目個數的時候直接加載數據:

//添加滑動監聽  myRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {  @Override  //當RecyclerView的滑動狀態改變時觸發  public void onScrollStateChanged(RecyclerView recyclerView, int newState) {  super.onScrollStateChanged(recyclerView, newState);  }   @Override  //當RecyclerView滑動時觸發(類似點擊事件的MotionEvent.ACTION_MOVE)  public void onScrolled(RecyclerView recyclerView, int dx, int dy) {  super.onScrolled(recyclerView, dx, dy);   int visible = layoutManager.getChildCount();//當天頁面顯示的條目個數  int total = layoutManager.getItemCount();//當前一共多少個條目  int past= layoutManager.findFirstCompletelyVisibleItemPosition();//布局上面被當住多少個條目   //當活動到最后一個條目時加載更多數據  if ((visible + past) >= total){   <span style="white-space:pre"> </span>//發送handler加載數據   handler.sendEmptyMessageDelayed(1,1000);    }   }  }); 

好了,以上功能點已經全部實現,如果大家有更簡單的方法實現以上功能點,歡迎告知,感謝;

點擊打開鏈接免費下載源碼

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南召县| 准格尔旗| 平安县| 察雅县| 东乡族自治县| 城固县| 盐山县| 苍梧县| 肥东县| 同心县| 丽水市| 都昌县| 加查县| 蓝田县| 手游| 两当县| 金山区| 永城市| 徐州市| 石柱| 徐汇区| 化德县| 武山县| 五常市| 云南省| 应城市| 鄂托克前旗| 贵溪市| 九龙县| 会昌县| 祥云县| 行唐县| 招远市| 西畴县| 易门县| 潜江市| 清水河县| 延长县| 新泰市| 四子王旗| 瑞丽市|