Android网格视图根据数据更改列数

问题描述:

enter image description here 我想安排网格视图,如下图所示。Android网格视图根据数据更改列数

+0

我想安排像下面的图片网格视图,它是动态的数据我必须通过,第一排两个项目将放置和第二项一个地方将放置再次第三和第四行我会继续,我如何处理,请帮助我.. –

+0

你需要使用Recyclerview的那 –

+0

https://www.google.co.in/?gfe_rd=cr&ei=hd9AWaD8NoPT8ge_u52YDQ&gws_rd=ssl#q=staggered+gridview+android+例如 –

您需要在回收站适配器中对viewType进行spacify。

DEMO HERE

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

    private List<Statistic> mList; 

    public RVStatisticAdapter(List<Statistic> list) { 
     this.mList = list; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view; 

     switch (viewType) { 
      case CITY_TYPE: 
       view = LayoutInflater.from(parent.getContext()).inflate(R.layout.statistic_row_one, parent, false); 
       return new CityViewHolder(view); 
      case EVENT_TYPE: 
       view = LayoutInflater.from(parent.getContext()).inflate(R.layout.statistic_row_two, parent, false); 
       return new EventViewHolder(view); 
     } 
     return null; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     Statistic object = mList.get(position); 
     if (object != null) { 
      switch (object.getType()) { 
       case CITY_TYPE: 
        ((CityViewHolder) holder).mTitle.setText(object.getTitle()); 
        ((CityViewHolder) holder).no.setText(object.getNo()); 
        ((CityViewHolder) holder).playerone.setText(object.getPlayer_one()); 

        break; 
       case EVENT_TYPE: 
        ((EventViewHolder) holder).mTitle.setText(object.getTitle()); 
        ((EventViewHolder) holder).no.setText(object.getNo()); 
        ((EventViewHolder) holder).playerone.setText(object.getName()); 
        ((EventViewHolder) holder).playertwo.setText(object.getPlayer_two()); 
        break; 
      } 
     } 
    } 

    @Override 
    public int getItemCount() { 
     if (mList == null) 
      return 0; 
     return mList.size(); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (mList != null) { 
      Statistic object = mList.get(position); 
      if (object != null) { 
       return object.getType(); 
      } 
     } 
     return 0; 
    } 

    public static class CityViewHolder extends RecyclerView.ViewHolder { 
     private TextView mTitle,no,playerone; 

     public CityViewHolder(View itemView) { 
      super(itemView); 
      mTitle = (TextView) itemView.findViewById(R.id.tv_title); 
      no = (TextView) itemView.findViewById(R.id.tv_no); 
      playerone = (TextView) itemView.findViewById(R.id.tv_player_one); 

     } 
    } 

    public static class EventViewHolder extends RecyclerView.ViewHolder { 
     private TextView mTitle,no,playerone,playertwo; 

     public EventViewHolder(View itemView) { 
      super(itemView); 
      mTitle = (TextView) itemView.findViewById(R.id.tv_title); 
      no = (TextView) itemView.findViewById(R.id.tv_no); 
      playerone = (TextView) itemView.findViewById(R.id.tv_player_one); 
      playertwo = (TextView) itemView.findViewById(R.id.tv_player_two); 
     } 
    } 
} 

您需要使用RecyclerViewGridLayoutManager。然后您可以使用GridLayoutManager.setSpanSizeLookup动态设置列计数。

gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
     @Override 
     public int getSpanSize(int position) { 
      switch (adapter.getItemViewType(position)) { 
       case VIEW_TYPE_1: 
        return 1; 
       case VIEW_TYPE_2: 
        return 2;     
       default: 
        return -1; 
      } 
     } 
    }); 
+0

请给我解释一下..please .. –

+0

@VigneshwaranT编辑 – Darish

+0

感谢ü老兄其工作.. –

可以使用StaggeredGridLayoutManager

private StaggeredGridLayoutManager gaggeredGridLayoutManager; 
    gaggeredGridLayoutManager = new StaggeredGridLayoutManager(2, 1); 
    recyclerView.setLayoutManager(gaggeredGridLayoutManager); 

更多信息,请点击此链接StaggeredGridLayoutManager

例如看到这个图像enter image description here

你可以采取替代的GridView RecyclerView写像这样

RecyclerView mRecyclerView=(RecyclerView)findViewById(R.id.card_recycler_view); 
    GridLayoutManager glm = new GridLayoutManager(getActivity(), 4); 
      glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
       @Override 
       public int getSpanSize(int position) { 
        if (position % 3 == 2) { 
         return 4; 
        } else { 
         return 2;      
      } 
     } 
    }); 
    mRecyclerView.setLayoutManager(glm); 
+0

我想根据对所有数据 –

+0

为第一回2和else条件回报4. – Dhanumjay

+0

谢谢2然后1逻辑..你在努力工作.. –

此一会工夫。试试这个

RecyclerView RecyclerView=RecyclerView)findViewById(R.id.card_recycler_view); 

GridLayoutManager glm = new GridLayoutManager(getActivity(), 4); 
     glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
      @Override 
      public int getSpanSize(int position) { 
       switch(position%3) { 
       case 0: 
         return 4; 
         break; 
       case 1: 
         return 2; 
         break; 
       case 2: 
         return 2; 
         break; 
     } 
    } 
}); 

mRecyclerView.setLayoutManager(glm);