2017-03-19 13 views
0

RecyclerViewAdapterには2つのアイテムタイプがあります。 1つのheaderViewに対してArrayListおよびHeaderViewHolderのすべてのitemViewsについてItemViewHolderArrayListからアイテムを削除してからnotifyItemRemoved(position)を使用して、RecyclerViewからitemViewを削除することができます。しかし、ArrayListに関連付けられていないheaderViewを削除するにはどうすればよいですか?以下はRecyclerViewからリストに関連付けられていないビューを削除します

RecyclerViewAdapterからいくつかのコードです:

private static final int TYPE_HEADER = 0; 
private static final int TYPE_ITEM = 1; 
private List<Offer> mValues; 
OfferListAdapter(List<String> items) { 
     mValues = items; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     if (viewType == TYPE_ITEM) { 
      View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.itemView, parent, false); 
      return new ItemViewHolder(v); 
     } else if (viewType == TYPE_HEADER) { 
      View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.headerView, parent, false); 
      return new HeaderViewHolder(v); 
     } 
     return null; 
    } 

    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 
     if (holder instanceof ItemViewHolder) { 
      ItemViewHolder userViewHolder = (ItemViewHolder) holder; 
     } else if (holder instanceof HeaderViewHolder) { 
      HeaderViewHolder headerViewHolder= (HeaderViewHolder) holder; 
     } 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (isPositionHeader(position)) 
      return TYPE_HEADER; 

     return TYPE_ITEM; 
    } 

    private boolean isPositionHeader(int position) { 
     return position == 0; 
    } 

    private Offer getItem(int position) { 
     return mValues.get(position - 1); 
    } 

    @Override 
    public int getItemCount() { 
     return mValues.size() + 1; 
    } 

答えて

1

HeaderView は少なくともビューのアダプタポイントから、あなたのリストの一部です。

isPositionHeader(pos -> pos == 0)と言って、リストの最初の項目がヘッダービューであることを示し、リストにmValues.size() + 1の項目があることをアダプタに通知します。 +1は最初に来るヘッダーを補うものです。

このビューをもう一度削除することはできますか?


オン/オフを切り替えるには、状態を切り替えることができるものが必要です。 booleanを使用してみませんか?ヘッダーが表示されるかどうかを示すisShowingHeaderフィールドを持つことができます。

これはコードにどのような影響を与えますか?上記と同じコードが... ...

// list is longer by 1 when showing a header 
mValues.size() + (isShowingHeader ? 1 : 0) 

があなたのヘッダを隠す/

// if we show the header, the 0 position is the header 
isPositionHeader(pos -> isShowingHeader && pos == 0) 

そして、あなたのリストのサイズについて示すときうーん...あなたは今だけisShowingHeaderを更新し、notifyDataSetChanged()を呼び出す必要があります変更された値をアダプターに通知します。

+0

あなたはもう一度私の日を作りました – Mike

関連する問題