現在、私は RecyclerView と GridLayoutManager をさらに調査し、ギャラリー表示用の見栄えの良い UI を実現しようとしていますが、GridLayoutManager のスパン サイズに問題があります。ドキュメントが言ったように: デフォルトでは、各アイテムは 1 スパンを占有します。setSpanSizeLookup(SpanSizeLookup) を介してカスタム GridLayoutManager.SpanSizeLookup インスタンスを提供することで、これを変更できます。
これで、位置0のアイテムのスパンを2に設定すると、colspanとrowspanも2に設定されると予想されますが、そのようには機能しないようです。縦向きの場合は GridLayoutManager の列数を 2 に、横向きの場合は 4 に列数を設定しました。2番目と3番目のアイテムの下に2つの空のセルが作成されるため、縦向きでは完全に機能しますが、横向きでは機能しません。
これが私のコードです:
gallery = new ArrayList<HashMap<String, String>>();
adapter = new GalleryAdapter(getBaseContext(), gallery);
// using grid layout manager
GridLayoutManager mLayoutManager = new GridLayoutManager(this, getResources().getInteger(R.integer.col_count));
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
switch(adapter.getItemViewType(position)){
case 2:
return 2;
case 1:
return 1;
default:
return -1;
}
}
});
list_news.setLayoutManager(mLayoutManager);
list_news.setAdapter(adapter);
アダプター:
public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.ViewHolder> {
Context context;
ArrayList<HashMap<String, String>> article;
ImageLoader mImageLoader;
@Override
public int getItemCount() {
return article.size();
}
public GalleryAdapter(Context context, ArrayList<HashMap<String, String>> article){
this.context = context;
this.article = article;
}
// Create new views (invoked by the layout manager)
@Override
public GalleryAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.articles_item, parent, false);
// set the view's size, margins, paddings and layout parameters
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public int getItemViewType(int position) {
// Just as an example, return 0 or 2 depending on position
// Note that unlike in ListView adapters, types don't have to be contiguous
if(position==0){
return 2;
}else{
return 1;
}
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
mImageLoader = VolleyQueue.getInstance(context).getImageLoader();
holder.image.setImageUrl(article.get(position).get("image"), mImageLoader);
holder.image.setDefaultImageResId(R.drawable.test);
}
static class ViewHolder extends RecyclerView.ViewHolder {
@Bind(R.id.image) NetworkImageView image;
public ViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
そして、横向きと縦向きの結果のスクリーンショットは次のとおりです。
このために空白のセルを避ける方法はありますか?
アップデート:
私が達成しようとしていることをよりよく視覚化するために、横向きモードにしたいイメージを次に示します。数値は予想順位に基づく項目です。