2016-04-21 92 views
2

我有一個taskLists列表。爲了顯示我已經使用recyclerview的列表。今天,明天和晚些時候我的名單中有前三項。我想在回收站視圖中的前3項後添加一個分隔符。我怎樣才能做到這一點?如何在recyclerview中的特定位置添加分隔符?

適配器:

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ItemViewHolder>{ 

    ArrayList<ListData> item; 
    public static final int TYPE1=1; 
    Context conext; 


    public ListAdapter(Context context, ArrayList<ListData> item) { 
     this.conext=context; 
     this.item=item; 

    } 
    public interface OnItemClickListener { 
     void onItemClick(ListData listData); 
    } 
    @Override 
    public int getItemCount() { 
     return item.size(); 

    } 
    public void remove(int position) { 
     item.remove(position); 
     notifyItemRemoved(position); 
    } 

    // @Override 
    // public int getItemViewType(int position) { 
     // return item.get(position).getExpenseType();// Assume that this return 1 0r 2 
    // } 

    @Override 
    public void onBindViewHolder(ItemViewHolder itemViewHolder,final int i) { 

     itemViewHolder.listName.setText(item.get(i).getTitle()); 

    } 

    @Override 
    public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup,int viewType) { 

     View itemView = LayoutInflater. 
       from(viewGroup.getContext()). 
       inflate(R.layout.list_layout, viewGroup, false); 
     return new ItemViewHolder(itemView,viewType); 

    } 


    public static class ItemViewHolder extends RecyclerView.ViewHolder { 

     TextView listName; 


     ItemViewHolder(View itemView, int viewType) { 
      super(itemView); 

      listName = (TextView)itemView.findViewById(R.id.listData); 

     } 
    } 
    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 

} 

任何人都可以在這方面幫助我怎樣才能把分離後的清單3項? 謝謝..

+0

你可以分享你想要達到 –

+0

http://android.amberfog.com/wp-content/uploads/2010/02/004.png截圖......喜歡這個。 3項後。 @PhanVănLinh – Sid

回答

2

一種解決方案是確定2種RecyclerView行(一個正常一行和一對分離器),可以添加其他塊 另一種方案是,你應該在Separator View在你的custom RecycleView row xml

<View 
    android:id="@+id/separatorView" 
    android:layout_width="match_parent" 
    android:layout_height="3dp" 
    android:visible="gone" 
    android:background="@android:color/darker_gray"/> 

然後在你的RecyclerView.AdapterbindViewHolder底部,隱藏在正常行,可見它的分離器,分離器排

@Override 
    public void bindViewHolder(ViewHolder holder, int position) { 
     if(position == separatorPosition){ 
      holder.separatorView.visible = View.VISIBLE; 
     }else{ 
      holder.separatorView.visible = View.GONE; 
     } 
    } 

希望這有助於

+0

最簡單的一個..謝謝[email protected]ănLinh – Sid

+0

但在未來,如果你的分隔視圖更復雜,我建議你應該使用解決方案1(定義2種RecyclerView)。快樂編碼 –

+0

不,我只是想這樣.. :-)謝謝.. @ PhanVănLinh – Sid

2

您可以創建兩個ViewHolder類,並將它們切換到onCreateViewHolder。一個包含您的自定義行,另一個作爲您的自定義列表項。

class ViewHolderLine extends RecyclerView.ViewHolder { //contains line 
    } 

    class ViewHolderItems extends RecyclerView.ViewHolder { //contains data 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return item.get(position).getExpenseType();// Assume that this return 1 0r 2 
    } 

    @Override 
    public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup,int viewType) { 

     switch (viewType) { 
     case 1: return new ViewHolderLine(); 
     case 2: 
      View itemView = LayoutInflater. 
      from(viewGroup.getContext()). 
      inflate(R.layout.list_layout, viewGroup, false); 
      return new ItemViewHolder(itemView,viewType); 
     } 


    } 

有關詳細信息,您可以查看詳細說明here

3

你應該定義RecyclerView行的2種類型:

...YourRecyclerAdapter extends RecyclerView.Adapter<BaseViewHolder> 

public static final int COMMON = 1; 
public static final int SEPARATOR = 2; 

覆蓋你AdaptergetItemViewType方法:

@Override 
public int getItemViewType(int position) { 
    if (position%10 == 0) //each 10 row is separator (change it!) 
     return SEPARATOR; 
    else return COMMON; 
} 

更改您的AdapteronCreateViewHolder方法:

@Override 
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    if (viewType == COMMON) 
     return new ItemViewHolder(LayoutInflater.from(activity).inflate(R.layout.list_layout, parent, false)); 
    else 
     return new SeparatorHolder(LayoutInflater.from(activity).inflate(R.layout.separator_item, parent, false)); 
} 

@Override 
public void onBindViewHolder(BaseViewHolder holder, int position) { 
    if (getItemViewType(position) == COMMON) { 
      //do stuff 
    } else { 
    } 
} 

ItemViewHolder延伸BaseViewHolder
SeparatorHolder延伸BaseViewHolder
BaseViewHolder延伸RecyclerView.ViewHolder

+0

但是我想顯示整個列表不會檢查視圖類型,如果我們已經把條件?@Vladimir Kulyk – Sid

+1

@Sid無論如何,這是正確的方式做你想做的。 –

1

,如果你知道你只打算在1日3項添加分隔符,那麼你可以把基於項目的position的條件,在onBindViewHolder之內。

PS:請不要忘記後,如果塊

相關問題