How to add margin to 2x2 items view in grid view?

89 Views Asked by At

Want to add margin to gridview in the following manner. Left margin for 2,4, 2,9, 12,14,.. Right margin for 3,5, 8,10, 13,15,..

Here is my code snippet which I tried to set margin to 2x2 items in grid view...

i.e positions - ..,2,3,4,5,..,7,8,9,10,..,12,13,14,15,..,17,18,19,20,.. like wise.

for 2,3,4,5 & 12,13,14,15,.. Getting the expected output. but my case failed for 7,8,9,10 & 17,18,19,20 series.

Help me to solve this. Confused to solve this mathematical puzzle. Thanks in advance.

public class BoxFeedAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<BoxFeedResult> boxFeedResults;
private Context mContext;
private RecyclerViewItemClickListener viewItemClickListener;

private final int LARGE_TYPE = 0;
private final int SMALL_TYPE = 1;
private final int PROGRESS_TYPE = 2;

private int GRID_VIEW_MARGIN_LEFT = 0;
private int GRID_VIEW_MARGIN_RIGHT = 0;
private int GRID_VIEW_MARGIN_TOP = 0;
private int GRID_VIEW_MARGIN_BOTTOM = 0;
private int GRID_VIEW_ROW_MARGIN = 0;

public BoxFeedAdapter(Context context, RecyclerViewItemClickListener viewItemClickListener) {
    this.mContext = context;
    this.viewItemClickListener = viewItemClickListener;
    boxFeedResults = new ArrayList<>();
    GRID_VIEW_MARGIN_LEFT = context.getResources().getDimensionPixelOffset(R.dimen.empty_dimen);
    GRID_VIEW_MARGIN_RIGHT = context.getResources().getDimensionPixelOffset(R.dimen.empty_dimen);
    GRID_VIEW_MARGIN_TOP = context.getResources().getDimensionPixelOffset(R.dimen.channel_row_padding);
    GRID_VIEW_MARGIN_BOTTOM = context.getResources().getDimensionPixelOffset(R.dimen.empty_dimen);
    GRID_VIEW_ROW_MARGIN = context.getResources().getDimensionPixelOffset(R.dimen.channel_row_padding_left);
}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    if (viewType == SMALL_TYPE) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_box_feed_series_banner, null);
        return new BoxFeedSeriesListViewHolder(layoutView);
    } else if (viewType == LARGE_TYPE) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_box_feed_episode_banner, null);
        return new BoxFeedEpisodeViewHolder(layoutView);
    } else {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.progress_item, null);
        return new ProgressViewHolder(layoutView);
    }
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
    if (holder instanceof BoxFeedSeriesListViewHolder) {
        StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams.setFullSpan(false);
    if ((position - 1) % 2 == 0) {
        layoutParams.setMargins(GRID_VIEW_ROW_MARGIN, GRID_VIEW_MARGIN_TOP, GRID_VIEW_MARGIN_RIGHT, GRID_VIEW_MARGIN_BOTTOM);
    } else {
        layoutParams.setMargins(GRID_VIEW_MARGIN_LEFT, GRID_VIEW_MARGIN_TOP, GRID_VIEW_ROW_MARGIN, GRID_VIEW_MARGIN_BOTTOM);
    }
    holder.itemView.setLayoutParams(layoutParams);

    final BoxFeedResult singleFeed = boxFeedResults.get(position);
    final BoxFeedSeriesListViewHolder viewHolder = (BoxFeedSeriesListViewHolder) holder;

    Glide.with(mContext)
            .load(singleFeed.getA4MediumUrl())
            .placeholder(R.drawable.bg_black)
            .into(viewHolder.seriesImage);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(mContext, singleFeed.getId(), Toast.LENGTH_SHORT).show();
            viewItemClickListener.onItemClickListioner(singleFeed, viewHolder.seriesImage, position);
        }
    });
} else if (holder instanceof BoxFeedEpisodeViewHolder) {

    StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    layoutParams.setFullSpan(true);
    holder.itemView.setLayoutParams(layoutParams);

    final BoxFeedResult singleFeed = boxFeedResults.get(position);
    final BoxFeedEpisodeViewHolder viewHolder = (BoxFeedEpisodeViewHolder) holder;
    Glide.with(mContext)
            .load(singleFeed.getAspectMediumUrl())
            .placeholder(R.drawable.bg_black)
            .into(viewHolder.episodeImage);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(mContext, singleFeed.getId(), Toast.LENGTH_SHORT).show();
        }
    });
} else {
    StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    layoutParams.setFullSpan(true);
    holder.itemView.setLayoutParams(layoutParams);
}
}

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

@Override
public int getItemViewType(int position) {
    switch (boxFeedResults.get(position).getTileType()) {
        case “large":
            return LARGE_TYPE;
        case “small":
            return SMALL_TYPE;
        default:
            return PROGRESS_TYPE;
    }
}

public void addList(List<BoxFeedResult> feedResults) {
    this.boxFeedResults = feedResults;
    notifyDataSetChanged();
}
}

Expected output isenter image description here

0

There are 0 best solutions below