RecycleView的出現(xiàn),其靈活的展現(xiàn)方式,可以說能夠完全替代ListView和GridView夺欲。
講RecycleView和ListView作一個(gè)簡(jiǎn)單的對(duì)比:
1.RecycleView的適配器中谓罗,我們不需要再去判斷contentView,以及為了優(yōu)化性能而去對(duì)viewHolder進(jìn)行setTag綁定顶别。RecycleView的Adapter對(duì)Viewholder進(jìn)行了封裝處理谷徙,讓開發(fā)者只關(guān)注于item的處理。
2.RecycleView可以設(shè)置列表的展示方向驯绎,可以輕松的實(shí)現(xiàn)橫向列表功能完慧,這需要我們?yōu)镽ecycleView進(jìn)行setLayoutManager(),傳入?yún)?shù)為
? ? a.LinearLayoutManager:線性布局管理器
? ? b.StaggeredGridLayoutManager: 錯(cuò)列網(wǎng)格布局管理器 ?(瀑布流)
? ? c.GridLayoutManager:網(wǎng)格布局管理器
3.列表分割線需手動(dòng)添加剩失,可以使用默認(rèn)風(fēng)格屈尼,也可以自定義分割線;自定義的分割線可以是圖片赴叹,也可以是xml樣式
4.自動(dòng)增刪功能以及動(dòng)畫效果
5.唯一苦逼的是鸿染,item的點(diǎn)擊事件需要開發(fā)者自己去實(shí)現(xiàn)
代碼如下:
1.RecycleView的配置
/控制其顯示的方式,請(qǐng)通過布局管理器LayoutManager
LinearLayoutManager linearLayoutManager =new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
//控制Item間的間隔(可繪制)乞巧,請(qǐng)通過ItemDecoration
recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
//控制Item增刪的動(dòng)畫涨椒,請(qǐng)通過ItemAnimator
recyclerView.setItemAnimator(new DefaultItemAnimator());
customAdapter =new CustomAdapter(this, list);
recyclerView.setAdapter(customAdapter);
//控制點(diǎn)擊、長(zhǎng)按事件,對(duì)不起蚕冬,自己Mark接口回調(diào)
customAdapter.setmOnItemClickListenter(new OnItemClickCallback() {
????@Override
? ? public void onItemClick(int position) {
????????????Toast.makeText(MainActivity.this,"點(diǎn)擊了條目",Toast.LENGTH_LONG).show();
????}
????@Override
? ? public void onLongItemClick(int position) {
????????????//控制Item的增刪免猾,對(duì)不起,也是自己Mark
? ? ? ? ????customAdapter.removeItem(position);
????}
});
2.item點(diǎn)擊監(jiān)聽接口
????public interface OnItemClickCallback {
????????void onItemClick(int position);
????????void onLongItemClick(int position);
????}
3.adapter的設(shè)置
? ? 1.item布局文件綁定到繼承RecyclerView.ViewHolder的自定義的ViewHolder
????????public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
????????????View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_recycleview, parent,false);
????????????ViewHolder holder =new ViewHolder(itemView);
????????????return holder;
????????}
? ? 2.item數(shù)據(jù)展示以及點(diǎn)擊事件處理
? ??????@Override
????????public void onBindViewHolder(ViewHolder holder,final int position) {
????????????holder.tv.setText(mData.get(position));
????????????if (mOnItemClickCallback !=null){
????????????????????holder.itemView.setOnClickListener(new View.OnClickListener() {
????????????????????????@Override
? ? ? ? ? ? ????????????public void onClick(View v) {
????????????????????????????????mOnItemClickCallback.onItemClick(position);
????????????????????}
????????????});
????????????holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
????????????????????@Override
? ? ? ? ? ? ????????public boolean onLongClick(View v) {
????????????????????????mOnItemClickCallback.onLongItemClick(position);
????????????????????????return false;
????????????????????}
????????????});
? ? ? ? }
????}
3.自定義ViewHolder
? ??????class ViewHolderextends RecyclerView.ViewHolder{
????????????????private TextViewtv;
????????????????public ViewHolder(View itemView) {
????????????????????super(itemView);
????????????????????tv = itemView.findViewById(R.id.tv_str);
????????????????}
? ? ? ? ? }