RecyclerView的簡單使用
1、在布局文件中聲明
<android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:scrollbars="vertical" android:layout_width="match_parent" android:layout_height="match_parent"/>
2、在Activity中使用
// 1,找到這個View mRecyclerView = (RecyclerView)findViewById(R.id.my_recycler_view); // 2,設置布局管理LayoutManager mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); // 3,(可選)如果可以確定每個item的高度是固定的,設置這個選項可以提高性能 mRecyclerView.setHasFixedSize(true); // 4,設置Adapter mRecyclerView.setAdapter(new MyAdapter());
目前SDK中提供了三種自帶的LayoutManager:
-
LinearLayoutManager
</li> -
GridLayoutManager
</li> -
StaggeredGridLayoutManager
</li> </ul>LinearLayoutManager
mLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
GridLayoutManager
mLayoutManager = new GridLayoutManager(context,columNum); mRecyclerView.setLayoutManager(mLayoutManager);
注:在Grid布局中也可以設置列表的Orientation屬性,來實現橫向和縱向的Grid布局。
StaggeredGridLayoutManager
瀑布流就使用StaggeredGridLayoutManager吧,具體使用方法見http://blog.csdn.net/duanymin/article/details/44979355
3、Adapter的創建
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { public String[] datas = null; public MyAdapter(String[] datas) { this.datas = datas; } //創建新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; } //將數據與界面進行綁定的操作 @Override public void onBindViewHolder(ViewHolder viewHolder, int position) { viewHolder.mTextView.setText(datas[position]); } //獲取數據的數量 @Override public int getItemCount() { return datas.length; } //自定義的ViewHolder,持有每個Item的的所有界面元素 public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(View view){ super(view); mTextView = (TextView) view.findViewById(R.id.text); } } }
4、添加單擊事件
// 1 定義接口 public static interface OnRecyclerViewItemClickListener { void onItemClick(View view , DataModel data); }
// 2 添加接口和設置接口的方法 private OnRecyclerViewItemClickListener mOnItemClickListener = null; public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { this.mOnItemClickListener = listener; }
// 3 在Adapter實現OnClickListener方法 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements View.OnClickListener{ @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, final int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false); ViewHolder vh = new ViewHolder(view); //將創建的View注冊點擊事件 view.setOnClickListener(this); return vh; } @Override public void onBindViewHolder(ViewHolder viewHolder, final int i) { viewHolder.mTextView.setText(datas.get(i).title); //將數據保存在itemView的Tag中,以便點擊時進行獲取 viewHolder.itemView.setTag(datas.get(i)); } ... @Override public void onClick(View v) { if (mOnItemClickListener != null) { //注意這里使用getTag方法獲取數據
} ...
}</pre>
在Activity中
mAdapter = new MyAdapter(getDummyDatas()); mRecyclerView.setAdapter(mAdapter); mAdapter.setOnItemClickListener(new MyAdapter.OnRecyclerViewItemClickListener() { @Override public void onItemClick(View view, DataModel data) { //DO your fucking bussiness here! } });
5、Item動畫
// 設置item動畫 mRecyclerView.setItemAnimator(new DefaultItemAnimator());
如果要自定義動畫效果需要繼承ItemAnimator
GitHub上的動畫效果:RecyclerViewItemAnimators
6、更新數據
這里更新數據集不是用adapter.notifyDataSetChanged()而是 notifyItemInserted(position)與notifyItemRemoved(position) 否則沒有動畫效果。
為adapter中添加兩個方法:
public void addData(int position) { mDatas.add(position, "Insert One"); notifyItemInserted(position); }
public void removeData(int position) { mDatas.remove(position); notifyItemRemoved(position); }</pre>
來自:http://www.cnblogs.com/huangzx/p/4594980.html