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

相關問題