2017-05-05 6 views
1

リサイクラビューでは、0,1,2,3などの文字列があり、同じrecyclerviewでは3番目のインデックスごとにimageviewのようなビューを配置したいと考えています。以下に述べるコードはうまくいきますが、画像ビューはシーケンスのように0のインデックスから始まります。 - Imageview - > 0,1,2 ---> imageview --->アダプタのandroidのリサイクラビューのすべての3番目のインデックスにビューを配置する方法は?

mList = (RecyclerView) findViewById(R.id.dealList); 
    layoutManager = new LinearLayoutManager(mContext); 
    mList.setLayoutManager(layoutManager); 
    mList.setHasFixedSize(true); 
    // set divider between items of list 
    mList.addItemDecoration(new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL)); 
    list = getResources().getStringArray(R.array.list); 
    int size = list.length; 
    ArrayList<String> newList = new ArrayList<>(); 
    for (int i = 0; i < size; i++) { 
     if (i%2==0){ 
      newList.add(null); 
     } 
     newList.add(list[i]); 
    } 
    adapter = new CMyAdapter(mContext, newList); 
    mList.setAdapter(adapter); 

コード: - - :

private Context mContext; 
private ArrayList<String> newList; 
private static final int CONTENT_TYPE = 0; 
private static final int AD_TYPE = 1; 

public CMyAdapter(Context context, ArrayList<String> list) { 
    this.mContext = context; 
    this.newList = list; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    ViewHolder holder = null; 
    if (viewType == AD_TYPE) { 
     View adView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view2, parent, false); 
     holder = new AdViewHolder(adView); 
    } else { 
     View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view1, parent, false); 
     holder = new ItemViewHolder(itemView); 
    } 
    return holder; 
} 

@Override 
public int getItemViewType(int position) { 
    if (newList.get(position) == null) { 
     return AD_TYPE; 
    } else { 
     return CONTENT_TYPE; 
    } 

} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    if (newList.get(position) == null) { 
     AdViewHolder adViewHolder = (AdViewHolder) holder; 
     adViewHolder.m_dummyImage.setImageResource(R.mipmap.ic_launcher_round); 
    } else { 
     ItemViewHolder itemViewHolder = (ItemViewHolder) holder; 
     itemViewHolder.m_Text.setText(newList.get(position)); 
    } 
} 

@Override 
public int getItemCount() { 
    return newList.size(); 
} 

class ViewHolder extends RecyclerView.ViewHolder { 
    ViewHolder(View itemView) { 
     super(itemView); 


    } 
} 

private class ItemViewHolder extends ViewHolder { 
    TextView m_Text; 

    ItemViewHolder(View itemView) { 
     super(itemView); 
     m_Text = (TextView) itemView.findViewById(R.id.textDemo); 
    } 
} 

private class AdViewHolder extends ViewHolder { 
    ImageView m_dummyImage; 

    AdViewHolder(View v) { 
     super(v); 
     m_dummyImage = (ImageView) itemView.findViewById(R.id.adImage); 
    } 
} 

}

答えて

0

あなたはこれを上行うことができ、ここで私は、インデックス0

コードの前に画像ビューを表示したくありませんCMyAdapter

@Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     if (position%3==0) { 
      //TODO 
     } else { 
      //TODO  
     } 
    } 
+0

それはmethid上 – Niraj

1

(私は!= 0)を追加であれば、条件

if (i%2==0 && i!=0){ 
     newList.add(null); 
    } 
+0

ArrayListの newList =新しいのArrayListを<>()実行して、同じです。 for(int i = 0; i

0
@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
if (position%3==0 && position>0){ 
    AdViewHolder adViewHolder = (AdViewHolder) holder; 
    adViewHolder.m_dummyImage.setImageResource(R.mipmap.ic_launcher_round); 
} else { 
    ItemViewHolder itemViewHolder = (ItemViewHolder) holder; 
    itemViewHolder.m_Text.setText(newList.get(position)); 
} 
} 
+0

答えがOPの質問を解決する方法を説明してください。 –

+0

@Niraj編集の回答を見る – Lingeshwaran

関連する問題