2017-02-14 6 views
-1

私はRecyclerViewを使用しています。複数のviewTypeを使用して作成したRecyclerviewアイテムの上にヘッダーテキストを挿入します。下の画像が結果です。うまく動作しますが、ヘッダI'm headerのように見えますが、私のサンプルテキストリスト項目の最初の項目が置き換えられます。リストに10が表示されるまで、サンプルテキスト1にする必要があります。したがって、結果にはSample Text 1が表示され、下の出力イメージには表示されません。以下リストアイテムは、複数のビュータイプを使用するrecyclerviewのヘッダに置き換えられています

Multiple View Types

アダプタ

public MyAdapter (Header head, List<Sample> list) { 
    header = head; 
    sampleList= list; 
    sampleList.add(0, new Sample()) // added dummy element in 0th position 
} 

内部コード以下MyAdapter.class

public class MyAdapter extends RecyclerView.Adapter <RecyclerView.ViewHolder> { 

private List<Sample> sampleList; 
private Context mContext; 

private static final int TYPE_HEADER = 0; 
private static final int TYPE_ITEM = 1; 

private Header header; 

public MyAdapter (Header head, List<Sample> list) { 
    header = head; 
    sampleList= list; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    mContext = parent.getContext(); 
    View view; 

    if(viewType == TYPE_HEADER) { 
     view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_header, parent, false); 
     return new HeaderHolder(view); 
    } else if(viewType == TYPE_ITEM) { 
     view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main, parent, false); 
     return new ItemHolder(view); 
    } 
    return null; 
} 

@Override 
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 

    if(holder instanceof HeaderHolder) { 

     HeaderHolder VHheader = (HeaderHolder)holder; 
     VHheader.txtTitle.setText(header.getHeader()); 

    } else if(holder instanceof ItemHolder) { 
     ((ItemHolder) holder).sample.setText("Sample Text "+ position); 
    } 
} 

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

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

    private boolean isPositionHeader(int position) 
    { 
     return position == 0; 
    } 
    private class ItemHolder extends RecyclerView.ViewHolder { 
    public TextView sample; 

    ItemHolder(View itemView) { 
      super(itemView); 
     sample= (TextView) itemView.findViewById(R.id.sampleText); 
} 

private class HeaderHolder extends RecyclerView.ViewHolder{ 
    TextView txtTitle; 
    HeaderHolder(View itemView) { 
     super(itemView); 
     this.txtTitle = (TextView)itemView.findViewById(R.id.txtHeader); 
    } 
} 
+1

:コードの下

使用。あなたの問題はすべて解決されます –

+0

@jiteshmohiteどうすればよいですか – user9123

+1

あなたのonBindViewHolderの一部は、positionの代わりにposition-1を使います。 – nnn

答えて

1

position = 0の場合、holderはHeaderHolderのインスタンスになり、position> 0の場合、holderはItemHolderのインスタンスになるため、リストの0の位置をスキップします。あなたがあなたのリスト0番目の位置にダミーの項目を追加する必要が

@Override 
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 

    if(holder instanceof HeaderHolder) { 

     HeaderHolder VHheader = (HeaderHolder)holder; 
     VHheader.txtTitle.setText(header.getHeader()); 

    } else if(holder instanceof ItemHolder) { 
     ((ItemHolder) holder).sample.setText("Sample Text "+ (position-1)); 
    } 
} 
1

使用0番目の位置があなたのヘッダに設定するために使用されるようにするためのコードです。 Recyclerビューでは、複数のビュータイプのリストを管理できる方法はありません。 これらがあなたに役立つことを願っています。

関連する問題