私はRecyclerView
を使用しています。複数のviewTypeを使用して作成したRecyclerviewアイテムの上にヘッダーテキストを挿入します。下の画像が結果です。うまく動作しますが、ヘッダI'm header
のように見えますが、私のサンプルテキストリスト項目の最初の項目が置き換えられます。リストに10が表示されるまで、サンプルテキスト1にする必要があります。したがって、結果にはSample Text 1
が表示され、下の出力イメージには表示されません。以下リストアイテムは、複数のビュータイプを使用するrecyclerviewのヘッダに置き換えられています
アダプタ
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);
}
}
:コードの下
使用。あなたの問題はすべて解決されます –
@jiteshmohiteどうすればよいですか – user9123
あなたのonBindViewHolderの一部は、positionの代わりにposition-1を使います。 – nnn