前情提要:去面試一家外企,需求是要重複使用乙個布局很多次,單單是布局的話用include就可以了,但是邏輯也要復用,而且提出了使用listview復用條目優化效能,想做成乙個自定義控制項。我嘗試了下,感覺直接用recycleview應該也是可以的。效果展示
實現思路
新增依賴
com.android.support:recyclerview-v7:24.2.0
根據需求建立三個不同型別的item對應的布局檔案
為每個型別的item建立資料bean類
建立通用的item資料bean類
為每個型別的item建立viewholder
建立adapter類
在activity使用recycleview
1.建立不同的item布局檔案
2. 為每個型別的item建立資料bean類
3. 建立通用的item資料bean類
public
class
recycleviewitemdata
public
recycleviewitemdata
(t t, int datatype)
public t gett
() public
void
sett
(t t)
public
intgetdatatype
() public
void
setdatatype
(int datatype)
}
3. 為每個型別的item建立viewholder
editviewholder
public class
editviewholder
extends
recyclerview.viewholder
}
spinnerholder
public class
spinnerholder
extends
recyclerview.viewholder
}
略。。。
4. 建立adapter類
recycleview的adapter中需要重寫方法的簡單介紹
public
class
madapter
extends
recyclerview.adapter
//用來建立viewholder
@override
public recyclerview.viewholder oncreateviewholder
(viewgroup parent, int viewtype)
//如果viewtype是按鈕型別,則建立buttonviewholder型viewholder
if (viewtype == type_button)
//如果viewtype是下拉列表型別,則建立spinnerholder型viewholder
if (viewtype == type_spinner)
return
null;
}//用來繫結資料
@override
public
void
onbindviewholder
(recyclerview.viewholder holder, int position)
else
if(position == 3)
else
if(position == 5)
((editviewholder) holder).medittext1.settext(medititem.gettext1());
((editviewholder) holder).medittext2.settext(medititem.gettext2());
}//如果holder是buttonviewholder的例項
if (holder instanceof buttonviewholder)
}//如果holder是spinnerholder的例項
if (holder instanceof spinnerholder)
}@override
public
intgetitemviewtype
(int position)
else
if (1 == datalist.get(position).getdatatype()) else
if (2 == datalist.get(position).getdatatype()) else
}@override
public
intgetitemcount
()}
5. 在activity使用recycleview
public
class
mainactivity
extends
}
Recycleview分頁載入
ui上無載入動畫 原理 當最後乙個item顯示時,執行載入操作 同理也可設定成最後某個item顯示時,提前執行載入操作 1 重寫recycleview滑動監聽 public abstract class loadmoreonscrolllistener extends recyclerview.on...
關於recycleview下拉載入更多資料問題補充
mrecyclerview.scrolltoposition lastvisibleitem 這個方法,但是會導致乙個問題,就是如果不進行上拉載入操作的時候,在別的頁面過來,也會自動定位到資料列表的最後乙個位置,然後我就換了一種寫法msuperrefreshrecyclerview.movetopo...
recycleview滑動到底部自動載入更多資料
首先我們的recycleveiw肯定有乙個layoutmanager final gridlayoutmanager manager new gridlayoutmanager mcontext,2 mrecyclerview.setlayoutmanager manager mrecyclervi...