0

json APIにはほとんどイメージがありません。私は、volleyライブラリを使用してイメージを取得できました。私は2つの列に垂直に画像ビューを表示するには、画像アダプタを使用してrecyclerviewを使用しましたが、1つの画像を大きくして、ユーザがクリックできる最初の画像として表示したいと思います。また、その時間間隔ごとに画像が変更されます。基本的に、APIは、すべての画像が同じサイズで垂直方向に2列で表示されない場合、時間を設定し、recyclerviewの上部に表示する画像を指示するなどのバックエンドタスクをすべて行います。RecyclerViewの他のビューより大きなビューを作るには?

私はrecyclerviewの正方形のレイアウトクラスを持っています。私はこれをどうすればできるのか知りたいだけです。コンセプトはうまくいくでしょう。

example

+0

あなたは簡単に実装のための代わりRecyclerViewの[FlexboxLayout](https://github.com/google/flexbox-layout)を使用することができます。 –

+0

@HusseinElFekyフレンドボックスでアンドロイドを学ぶことができる素敵で効果的なソースを教えてください。 –

+0

フレンドボックスを使用せずにwhtを実装する方法を教えてください。簡単 –

答えて

0

あなたはそれらがそれに応じて、次のコードは、ニュース記事アプリの一例であり、助けるべきバインドするために、ヘッダ項目のとonBindViewHolder内の他の小項目のための2つのビューを作成している必要があります。

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

    private List<NewsArticles> items = new ArrayList<>(); 

    private Context ctx; 
    private NewsArticles header; 
    private static final int TYPE_HEADER = 0; 
    private static final int TYPE_ITEM = 1; 
    private OnItemClickListener mOnItemClickListener; 

    public interface OnItemClickListener { 
    void onItemClick(View view, NewsArticles obj, int position); 
    } 

    public void setOnItemClickListener(final OnItemClickListener mItemClickListener) { 
    this.mOnItemClickListener = mItemClickListener; 
    } 

    // Provide a suitable constructor (depends on the kind of dataset) 
    public AdapterNewsArticlesListWithHeader(Context context, NewsArticles header, List<NewsArticles> items) { 
    this.items = items; 
    this.header = header; 
    ctx = context; 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 
    // each data item is just a string in this case 
    public TextView title; 
    public TextView short_content; 
    public TextView date; 
    public ImageView image; 
    public LinearLayout lyt_parent; 

    public ViewHolder(View v) { 
     super(v); 
     title = (TextView) v.findViewById(R.id.title); 
     short_content = (TextView) v.findViewById(R.id.short_content); 
     date = (TextView) v.findViewById(R.id.date); 
     image = (ImageView) v.findViewById(R.id.image); 
     lyt_parent = (LinearLayout) v.findViewById(R.id.lyt_parent); 
    } 
    } 

    class ViewHolderHeader extends RecyclerView.ViewHolder { 
    public TextView title; 
    public TextView date; 
    public ImageView image; 
    public LinearLayout lyt_parent; 

    public ViewHolderHeader(View v) { 
     super(v); 
     title = (TextView) v.findViewById(R.id.title); 
     date = (TextView) v.findViewById(R.id.date); 
     image = (ImageView) v.findViewById(R.id.image); 
     lyt_parent = (LinearLayout) v.findViewById(R.id.lyt_parent); 
    } 
    } 

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

    // Replace the contents of a view (invoked by the layout manager) 
    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 
    if (holder instanceof ViewHolderHeader) { 
     ViewHolderHeader vHeader = (ViewHolderHeader) holder; 
     vHeader.title.setText(header.getTitle()); 
     vHeader.date.setText(header.getDate()); 
     Picasso.with(ctx).load(header.getImage()).into(vHeader.image); 
     vHeader.lyt_parent.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       //TODO: do your thing 
      } 
     }); 

    } else if (holder instanceof ViewHolder) { 
     final NewsArticles c = items.get(position); 
     ViewHolder vItem = (ViewHolder) holder; 
     vItem.title.setText(c.getTitle()); 
     vItem.short_content.setText(c.getShort_content()); 
     vItem.date.setText(c.getDate()); 
     Picasso.with(ctx).load(c.getImage()).into(vItem.image); 
     vItem.lyt_parent.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       //TODO: do your thing 
      } 
     }); 
    } 

    } 

    // need to override this method 
    @Override 
    public int getItemViewType(int position) { 
    if (isPositionHeader(position)) { 
     return TYPE_HEADER; 
    } 
    return TYPE_ITEM; 
    } 

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

    public NewsArticles getItem(int position) { 
    return items.get(position); 
    } 

    // Return the size of your dataset (invoked by the layout manager) 
    @Override 
    public int getItemCount() { 
    return items.size(); 
    } 

} 
関連する問題