RecycleView的使用

RecycleView的出現(xiàn),其靈活的展現(xiàn)方式,可以說能夠完全替代ListView和GridView。

講RecycleView和ListView作一個簡單的對比:

1.RecycleView的適配器中,我們不需要再去判斷contentView,以及為了優(yōu)化性能而去對viewHolder進(jìn)行setTag綁定。RecycleView的Adapter對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: 錯列網(wǎng)格布局管理器 ?(瀑布流)

? ? c.GridLayoutManager:網(wǎng)格布局管理器

3.列表分割線需手動添加,可以使用默認(rèn)風(fēng)格,也可以自定義分割線;自定義的分割線可以是圖片,也可以是xml樣式

4.自動增刪功能以及動畫效果

5.唯一苦逼的是,item的點(diǎn)擊事件需要開發(fā)者自己去實(shí)現(xiàn)


代碼如下:

1.RecycleView的配置

/控制其顯示的方式,請通過布局管理器LayoutManager

LinearLayoutManager linearLayoutManager =new LinearLayoutManager(this);

recyclerView.setLayoutManager(linearLayoutManager);

//控制Item間的間隔(可繪制),請通過ItemDecoration

recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

//控制Item增刪的動畫,請通過ItemAnimator

recyclerView.setItemAnimator(new DefaultItemAnimator());

customAdapter =new CustomAdapter(this, list);

recyclerView.setAdapter(customAdapter);

//控制點(diǎn)擊、長按事件,對不起,自己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的增刪,對不起,也是自己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);

????????????????}

? ? ? ? ? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容