參考文章</br>
http://www.reibang.com/p/f0b28e26ff0e
最近在公司做的主要項(xiàng)目都是對(duì)外 SDK 的開發(fā),對(duì)界面的開發(fā)做得算是比較的少了。為了不對(duì)界面生疏工禾,有時(shí)候也還會(huì)重新看看界面的一些實(shí)現(xiàn)方式。
Android開發(fā)中UI界面離不開列表。從早期的ListView,到現(xiàn)在常用的RecyclerView恩静。都是實(shí)現(xiàn)里表的控件。現(xiàn)在ListView應(yīng)該算是用得比較少了蹲坷,就重要來(lái)回顧一下RecyclerView怎么使用驶乾。
依賴RecyclerView庫(kù)
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta05'
編寫 Adapter
簡(jiǎn)單的例子就在 Adapter 中創(chuàng)建內(nèi)部類 ViewHolder。內(nèi)容比較簡(jiǎn)單冠句,直接看Adapter代碼吧轻掩。
public class RecyclerTestAdapter extends RecyclerView.Adapter<RecyclerTestAdapter.VH> {
private List<String> data;
public void setData(List<String> data) {
this.data = data;
}
@NonNull
@Override
public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item_rv, parent,false);
return new VH(view);
}
@Override
public void onBindViewHolder(@NonNull VH holder, int position) {
holder.mTvItem.setText(data.get(position));
}
@Override
public int getItemCount() {
return data != null ? data.size() : 0;
}
class VH extends RecyclerView.ViewHolder{
public TextView mTvItem;
public VH(@NonNull View itemView) {
super(itemView);
mTvItem = itemView.findViewById(R.id.tv_item);
}
}
}
在創(chuàng)建自定義的Adapter的時(shí)候,主要需要復(fù)寫 onCreateViewHolder 懦底、 onBindViewHolder 、 getItemCount 。
調(diào)用
最后編寫好 Adapter 之后聚唐,就是使用了丐重。RecyclerView和ListView的使用還是不一樣的,老樣子程序員直接看代碼杆查。
LinearLayoutManager layoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
RecyclerTestAdapter recyclerTestAdapter = new RecyclerTestAdapter();
recyclerView.setAdapter(recyclerTestAdapter);
ArrayList<String> datas = new ArrayList<>();
for (int i = 0; i < 20; i++) {
datas.add("第" + i);
}
recyclerTestAdapter.setData(datas);
recyclerTestAdapter.notifyDataSetChanged();
RecyclerView 相對(duì) ListView 來(lái)說(shuō)多出了一個(gè) LayoutManager 扮惦。一個(gè)布局管理器,這個(gè)就是決定了列表的布局樣式亲桦。
LinearLayoutManager : 線性布局管理器崖蜜,和之前的 ListView 樣式類似。為什么說(shuō)類似客峭,因?yàn)長(zhǎng)inearLayoutmanager能實(shí)現(xiàn)的功能比ListView 要多豫领,但是他們都是線性之類的樣式。
GridLayouManager : 網(wǎng)格布局舔琅,其實(shí)LinearLayoutManager 配置好之后也可以實(shí)現(xiàn)網(wǎng)格布局的樣式等恐。
StaggeredGridLayoutManager : 分散式列表布局, 通俗來(lái)說(shuō)就是可以實(shí)現(xiàn)瀑布流备蚓,可以實(shí)現(xiàn)item的不同高度的網(wǎng)格樣式课蔬。
LayoutMananger 后續(xù)在整理文章總結(jié)一下,這里就不展開了郊尝。
總結(jié)
簡(jiǎn)單的看二跋,其實(shí)RecyclerView 需要寫的代碼還是很多的。不慌流昏,Google之所以出RecyclerView就是打造一個(gè)可以高度定制話的滾動(dòng)控件扎即。早期要是在使用ListView 的時(shí)候確實(shí)發(fā)現(xiàn)實(shí)現(xiàn)很多效果,是相當(dāng)麻煩的横缔。在項(xiàng)目中我們是需要對(duì)RecyclerView進(jìn)行封裝的铺遂。