亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

不一樣的RecyclerView優雅實現復雜列表布局

泥阿布 移動開發工程師
難度初級
時長 1小時34分
學習人數
綜合評分9.70
31人評價 查看評價
9.7 內容實用
9.7 簡潔易懂
9.7 邏輯清晰
  • getItemOffsets()
    查看全部
  • reclycler中各個item設置邊界
    查看全部
  • recyclerview holder是保存view的單位,記錄在recyclerview的基本信息
    查看全部
  • RecyclerView實現多數據類型的list和grid混編 4.三個ViewHolder的改造 ViewHolder的bindViewHolder()會講viewHolder的控件成員和對應位置的數據綁定,但是現在有三種不同的數據類型,如何解決? (1)三種數據ViewHolder繼承RecyclerView.ViewHolder,各自實現 在onBindViewHolder()中根據不同viewType綁定不同的數據 (2)還是抽象一個ViewHolder,用T范型 public abstract class AbstractViewHolder<T> extends RecyclerView.ViewHolder{ public AbstractViewHolder(View itemView) { super(itemView); } public abstract void bindViewHolder(T dataModel); } 5.Adapter的改造 (1)getItemCount()和getItemViewType() 由于mTypes根據位置存放了所有數據的類型,所以可以直接從mTypes獲取 public int getItemViewType(int position) { return mTypes.get(position); } (2)onCreateViewHolder() onBindViewHolder() 如圖,需要說明: int realPosition = position - mFirstPositions.get(viewType); 是從每個list中取出item在它對應的數據列表的真實位置,這樣可以拿出item的數據mList1.get(realPosition) 然后拿這個數據來和viewHolder的控件綁定 holder.bindViewHolder(mList1.get(realPosition));
    查看全部
  • RecyclerView實現多數據類型的list和grid混編 1.原理 如果每個item是不同的布局,就會有多種數據類型,這樣就需要定義多個不同的數據類型 比如 public class ItemDataModelTwo { int avatarColor; String name; String content; } 這三種數據類型有不同的布局,而且只有第三種類型的數據才會list編排,前面兩種類類型的數據都是grid編排。這樣就有三個不同的數據列表list 這樣就需要為每個item數據標上它的類型,這樣從對應的位置就能獲得它的viewType,然后就可以在onCreateViewHolder()和onBindViewHolder()中根據不同viewType做不同操作。 2.初始化所有的數據 如圖 3.把數據傳遞給adapter public void addList(List<ModelOne> list1, List<ModelTwo> list2, List<ModelThree> list3) { this.mList1 = list1; this.mList2 = list2; this.mList3 = list3; // 為三種類型的數據列表分別置頂type類型,并初始化每個列表的初始位置 addListByType(TYPE_ONE, list1); addListByType(TYPE_TWO, list2); addListByType(TYPE_THREE, list3); } private void addListByType(int type, List list) { mPositions.put(type, mTypes.size()); for (int i = 0; i < list.size(); i++) { mTypes.add(type); } } 說明:mTypes按照位置存放每個item的類型,所以它的size是全部數據的size mPositions存放三種數據列表的起始位置
    查看全部
  • Grid和List混排的recyclerView 1.原理 grid形式的RecyclerView一般都是一行有多列,但是list形式的可以看作是只有一列的grid形式。 2.實現 (1)為RecyclerView設置GridLayoutManager,可以指定列數 GridLayoutManager layoutManager = new GridLayoutManager(this, 2); mRecyclerView.setLayoutManager(layoutManager); (2)grid和list混合編排 grid形式下,如果將某一itemView設置為獨占一行就可以了,這可以通過判斷itemType來設置。比如本來是兩列,讓某一itemView占兩列就是list形式 layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { int itemType = mRecyclerView.getAdapter().getItemViewType(position); if (ItemDataModel.TYPE_THREE == itemType) { return layoutManager.getSpanCount(); // 返回是總列數,獨占全部列數 } else { return 1; } } }); 3.為每個itemView設置背景和間距 如圖,說明: getItemOffsets()的view參數是itemView,通過它來獲得每一行的LayoutParams layoutParams.getSpanSize() 獲取itemView所占的列數 layoutParams.getSpanIndex() 獲取當前itemView在第幾列 視頻中代碼為grid形式一行兩列的每個itemView設置了上下,左右20的間距
    查看全部
  • 多種樣式的列表實現(下) 1.前面說要新建一個抽象ViewHolder,然后派生三個ViewHolder,如 public class TypeOneViewHolder extends AbstractViewHolder { public ImageView avatar; public TextView name; public TypeOneViewHolder(View itemView) { super(itemView); avatar = (ImageView) itemView.findViewById(R.id.avatar); name = (TextView) itemView.findViewById(R.id.name); } @Override public void bindViewHolder(ItemDataModel item) { avatar.setImageResource(item.getAvatarColor()); name.setText(item.getName()); } } 2.關鍵的adapter (1)和視頻中不同,這里Adapter的范型是AbstractViewHolder public class DemoAdapter extends RecyclerView.Adapter<AbstractViewHolder>{ (2)onCreateViewHolder() 返回ViewHolder,ViewHolder是根據每個布局inflate出來的view來創建的 new TypeOneViewHolder(mInflater.inflate(R.layout.item_type_one, parent, false)); 然后根據不同布局類型viewType返回不同的ViewHolder,如圖 (3)onBindViewHolder() ViewHolder的控件成員和對應的item數據綁定的過程,如圖 3.最最關鍵的getItemViewType() 返回不同布局的viewType,onCreateViewHolder()會根據它來創建不同的viewHolder
    查看全部
  • 多種樣式的列表實現 1.MainActivity的實現,主要看偽造數據的部分 如圖,需要注意隨機數生成: int type = ((int) (Math.random() * 3) + 1); Math.random()是0~1,(Math.random() * 3)就是0~3,強轉int就是0,1,2,所以((int) (Math.random() * 3) + 1)就是1,2,3,最后(type + 1) % 3就是2,0,1 2.根據三個不同顯示情況設計ItemDataModel,這個類的成員是每個itemView中要顯示數據的數據源 public class ItemDataModel { public static final int TYPE_ONE = 1; public static final int TYPE_TWO = 2; public static final int TYPE_THREE = 3; public int type; public int avatarColor; public String name; public String content; public int contentColor; 3.三種不同布局的ViewHolder ViewHolder包含了每個itemView中所有的控件,因為這里是三個不同的布局,且相差不大,所以定義一個抽象ViewHolder,再來派生三個ViewHolder。 RecyclerView的Adapter中有兩個重要重寫方法onCreateViewHolder(),onBindViewHolder() 前者需要返回創建的ViewHolder,后者需要為ViewHolder的控件成員設置要顯示的數據。 public abstract class AbstractViewHolder extends RecyclerView.ViewHolder{ public AbstractViewHolder(View itemView) { super(itemView); } public abstract void bindViewHolder(ItemDataModel item); }
    查看全部
  • 基礎知識 1.RecyclerView.Recycler 如圖,多個RecyclerView共用一個緩存池,RecycleredPool??梢耘渲镁彺娉氐膕ize
    查看全部
  • 簡介 1.RecyclerView的關鍵成員 (1)getItemViewType(int position) 根據不同位置返回不同的類型 (2)RecyclerView.ViewHolder 類似于listview的viewholder,每個item view中所以控件成員。RecyclerView中不再需要創建,只需要繼承。 (3)RecyclerView.Recycler 緩存機制,可以看一下listview的covertView,不需要再處理緩存。 2.數據處理 如圖 3.RecyclerView顯示流程 比如滑動列表時,滾動->調用getItemViewType(position)根據position獲取holder->如果為空,調用onCreateViewHolder(),否則調用onBindViewHolder() itemType是保存在viewHolder(繼承RecyclerView.ViewHolder)中的,viewHolder是對應于position的,緩存在cache中。 public void onBindViewHolder(final MyViewHolder holder, int position) 當顯示需要復用時,從cache中取holder來顯示。所以看起來比較流暢。 4.RecyclerView.ViewHolder 這里面包含了所有的view,除此之外,還有position,itemType,是否被緩存的flag等基本信息 public static abstract class ViewHolder { public final View itemView; int mPosition = NO_POSITION; int mOldPosition = NO_POSITION; long mItemId = NO_ID; int mItemViewType = INVALID_TYPE; int mPreLayoutPosition = NO_POSITION;
    查看全部
  • 數據結構
    查看全部
  • 多種布局設計流程
    查看全部
  • 綁定View
    查看全部
  • 分別從list種拿數據
    查看全部
  • 怎么取不同集合數據
    查看全部

舉報

0/150
提交
取消
課程須知
需掌握安卓基本四大組件的基礎知識,特別是ListView和GridView的用法
老師告訴你能學到什么?
學習這門課后可以更簡單快捷的完成一些復雜列表布局的實現 慕課網Android討論群② 170368200

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!