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了。