0

您好我在项目视图对齐方面存在问题我想要实现网格中的前四项和线性视图项中的其余项,其中包含一个图视图和动态线性视图。如何获得Recycler查看网格中的前四项,然后查看Linear Items中的前四项

我要实现我有

|Grid 0 | Grid 1 | 
------------------ 
|Grid 2 | Grid 3 | 
------------------ 
| Linear Item 0 | 
------------------ 
|Line1| 

末项电网项目视图返回而不是全角与线性项目

从开始

|Grid 0 | Grid 1 | 
------------------ 
|Grid 2 | Grid 3 | 
------------------ 
| LinearItem 0 | 
------------------ 
| LinearItem 1 | 

问题是什么MainActivity,使用GridLayout管理器,范围为

recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    recyclerView.setHasFixedSize(false); 
cardModelList = new ArrayList<>(); 


adapter = new CardAdapter(this, cardModelList); 

mLayoutManager = new GridLayoutManager(this, 2); 
     mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
      @Override 
      public int getSpanSize(int position) { 
       switch (adapter.getItemViewType(position)) { 
        case 1: 
         return 1; 
        case 2: 
         return 2; 
        case 3: 
         return 3; 
        default: 
         return 1; 
       } 
      } 
     }); 

recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.addItemDecoration(new GridSpacingDashboard(2, dpToPx(1), true)); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(adapter); 

然后法制备卡上MainActivity

private void prepareCards() { 


    int[] covers = new int[]{ 
      R.drawable.card_users, 
      R.drawable.card_unit, 
      R.drawable.card_request, 
      R.drawable.card_request_pending, 
      R.drawable.stats_main, 
      R.mipmap.coinsicon_cards, 

    }; 

    String[] stats = new String[]{ 
      userStatsFormated,villasStatsFormated,reqStatsFormated,pendingreqStatsFormated,"",pendingCollectionFormated, 
    }; 


    CardModel c = new CardModel(stats[0], "Number Of Users", "", covers[0],null); 
    cardModelList.add(c); 
    c = new CardModel(stats[1], "Number", "", covers[1],null); 
    cardModelList.add(c); 
    c = new CardModel(stats[2], "Total", "", covers[2],null); 
    cardModelList.add(c); 
    c = new CardModel(stats[3], "Request", "", covers[3],null); 
    cardModelList.add(c); 
    c = new CardModel(stats[4], "Graph", "", covers[3],null); 
    cardModelList.add(c); 
    c = new CardModel(stats[5], "Pending", "", covers[4],null); 
    cardModelList.add(c); 

卡适配器从onCreateView持有人开始

@Override 
    public CardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     CardViewHolder rcv = null; 

     switch (viewType) 

     { 
      case 1: 
       View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_sec, null); 
       rcv = new TopGridCardView(layoutView); 
       break; 
      case 2: 
       View layoutView3 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler_view, null); 

       chart = (BarChart) layoutView3.findViewById(R.id.chart1); 
       BARENTRY = new ArrayList<BarEntry>(); 
       BarEntryLabels = new ArrayList<String>(); 

       AddValuesToBARENTRY(); 
       AddValuesToBarEntryLabels(); 

       Bardataset = new BarDataSet(BARENTRY, "Projects"); 

       BARDATA = new BarData(BarEntryLabels, Bardataset); 

       Bardataset.setColors(ColorTemplate.COLORFUL_COLORS); 
       chart.setData(BARDATA); 
       chart.animateY(3000); 
       rcv = new GraphCardView(layoutView3); 
       break; 
      case 3: 
       View layoutView2 = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, null); 
       rcv = new BottomCardView(layoutView2); 
       break; 
     } 

return rcv; 



@Override 
    public void onBindViewHolder(CardViewHolder holder, final int position) { 
     CardModel cardModel = cardList.get(position); 

     if (holder.getItemViewType() == 1) { 
      TopGridCardView vholder = (TopGridCardView) holder; 
      vholder.secTitleStats.setText(cardModel.getCardTitles()); 
      vholder.secNumStats.setText(cardModel.getNumStats()); 
      vholder.secCardStats.setText(cardModel.getSecCartNumStats()); 
      if (position == 0) { 
       vholder.secthumbnail.setBackgroundColor(Color.parseColor("#137927")); 
      } 
      if (position == 1) { 
       vholder.secthumbnail.setBackgroundColor(Color.parseColor("#E91E63")); 
      } 
      if (position == 2) { 
       vholder.secthumbnail.setBackgroundColor(Color.parseColor("#02BBD2")); 
      } 
      if (position == 3) { 
       vholder.secthumbnail.setBackgroundColor(Color.parseColor("#9900FF")); 
      } 
      Glide.with(mContext).load(cardModel.getThumbnail()).into(vholder.secthumbnail); 

     } 

     else if (holder.getItemViewType() == 2) { 
      GraphCardView vholder = (GraphCardView) holder; 
      vholder.BarChart.setData(BARDATA); 


     } 

     else if (holder.getItemViewType() == 3) { 
       BottomCardView vholder = (BottomCardView) holder; 
       vholder.numStats.setText(cardModel.getNumStats()); 
       vholder.image_title.setText(cardModel.getCardTitles()); 
      } 
} 

在此背景获得的项目数量和位置返回

@Override 
public int getItemViewType(int position) { 
    if (isPositionHeader(position)) { 
     return 2; 
    } 
    return 1; 
} 


@Override 
public int getItemCount(){ 
    return 6; 
} 



private boolean isPositionHeader(int position) { 
     if (position == 4) { 
      return position == 4; 
     } 
     return position == 6; 
    } 
+0

为什么负:(什么的问题 – Mohtashim

+0

大感谢你的问题!但任何人都可以对代码有所了解! – Mohtashim

回答

0

你问题在于y我们的规模跨度查找期待3种不同项目类型的时候,其实你只有2,即无论是2或1更改值的大小跨度查找到代码:

switch (adapter.getItemViewType(position)) { 
        case 1: //this is for view type 1 (grid item) 
         return 1; 
        case 2: //this is for view type 2 (full width item) 
         return 2; 
        default: 
         return 1; //will default to grid item 
       } 

private boolean isPositionHeader(int position) { 
     if (position == 4 || position == 5) { 
      return true; 
     } 
    } 

大小跨度查找仅确定一个项目应该有多少列跨度,所以在不同视图类型的例子它要么是2列或1

+0

感谢分享我正在测试,这听起来符合逻辑,希望它能正常工作 – Mohtashim

+0

再次感谢!我尝试你的方法并删除案例3:并使用 private boolean isPositionHeader(int position){if(position == 4 || position == 5){ return true; } return false; } } 但我总共使用了六个项目四个顶部和第五个和第六个项目在线性视图中,仍然第六个项目没有覆盖完整的widht它仍然在网格视图中,如上图所示 – Mohtashim

+0

嗨,谢谢我解决了问题是我使用了三种不同的布局xml,我只能在两种布局中实现我想要的效果,我定义了Typeview 3(情况3:)底视图Typeview 2中的Cardview xml布局属性情况2:卡片视图,并显示我想要的结果,但我接受你的答案,因为它指导我到正确的路径和**大小范围查找的完美定义**,再次感谢您 – Mohtashim