3

любая идея, как использовать два разных LayoutManager в одном представлении? У меня есть четыре карты в сетке на верхней части экрана, и внизу, и я хочу LinearLayout но RecyclerView показывает один вид, в то времяGridLayout и LinearLayout как в одном RecyclerView

RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2); 
recyclerView.setLayoutManager(mLayoutManager); 
RecyclerView.LayoutManager lmLayoutManager = new LinearLayoutManager(this); 
recyclerView.setLayoutManager(lmLayoutManager); 
recyclerView.addItemDecoration(new GridSpacingDashboard(2, dpToPx(2), true)); 
recyclerView.setItemAnimator(new DefaultItemAnimator()); 
recyclerView.setAdapter(adapter); 

Есть ли способ, что я могу использовать обе точки зрения в одном RecyclerView Или на индекс О.И. имеют GridLayout и 1, показывающий LinearLayout, как можно добиться, если есть какие-либо возможности

Update (Card Adapter)

public class CardAdapter extends RecyclerView.Adapter<adapter.CardAdapter.CardViewHolder> { 

     public static final int topGridCard = 0; 
     public static final int bottomCards=1; 

     private Context mContext; 
     private List<CardModel> cardList; 

     public CardAdapter(Context mContext, List<CardModel> cardList) { 
      this.mContext = mContext; 
      this.cardList = cardList; 
     } 

     @Override 
     public.adapter.CardAdapter.CardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View v; 

      if (viewType == topGridCard) { 
       v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_sec, parent, false); 
       return new adapter.CardAdapter.TopGridCardView(v); 

      } 
      else if (viewType == bottomCards) { 
       v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false); 
       return new adapter.CardAdapter.BottomCardView(v); 
      } 
      return null; 
     } 

     @Override 
     public void onBindViewHolder(final adapter.CardAdapter.CardViewHolder holder, final int position) { 
      CardModel cardModel = cardList.get(position); 
      if (holder.getItemViewType()==topGridCard){ adapter.CardAdapter.TopGridCardView vholder = (adapter.CardAdapter.TopGridCardView) holder; 
       vholder.secTitleStats.setText(cardModel.getNumStats()); 
       vholder.secNumStats.setText(cardModel.getCardTitles()); 
       vholder.secCardStats.setText(cardModel.getSecCartNumStats()); 
       Glide.with(mContext).load(cardModel.getThumbnail()).into(vholder.secthumbnail); 
      } 
      else if(holder.getItemViewType()==bottomCards){ 
adapter.CardAdapter.BottomCardView vholder = (adapter.CardAdapter.BottomCardView) holder; 
       vholder.numStats.setText(cardModel.getNumStats()); 
       vholder.image_title.setText(cardModel.getCardTitles()); 
       Glide.with(mContext).load(cardModel.getThumbnail()).into(vholder.thumbnail); 
      }  
     } 

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

     public static class CardViewHolder extends RecyclerView.ViewHolder { 
      public CardViewHolder(View v) { 
       super(v); 
      } 
     } 

     public class TopGridCardView extends adapter.CardAdapter.CardViewHolder { 
      public TextView secTitleStats, secNumStats,secCardStats; 
      public ImageView secthumbnail; 

      public TopGridCardView(View view){ 
       super(view); 

       secTitleStats = (TextView) view.findViewById(R.id.secTitleNumStats); 
       secNumStats = (TextView) view.findViewById(R.id.secCardNumStats); 
       secCardStats = (TextView) view.findViewById(R.id.sectitle); 
       secthumbnail = (ImageView) view.findViewById(R.id.seCthumbnail); 
      } 
     } 

     public class BottomCardView extends adapter.CardAdapter.CardViewHolder { 

      public TextView numStats,image_title; 
      public ImageView thumbnail; 

      public BottomCardView(View view) { 
       super(view); 
       numStats=(TextView)view.findViewById(R.id.numStatics); 
       image_title=(TextView) view.findViewById(R.id.title_overlay); 
       thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
      } 
     } 

     @Override 
     public int getItemViewType(int position) { 
      if (isPositionHeader(position)) 
       return topGridCard; 
      return bottomCards; 
     } 

     private boolean isPositionHeader(int position) { 
      return position == 0; 
     } 
    } 

Я закрепил адаптер только для более под стоящий, нужный результат должен быть | Grid Card 1 | Grid Card 2 | | Сетка-карта 3 | Grid Card 4 | | Линейная карта 1 | | Линейная карта 2 |

любых возможностей

+0

Вы можете использовать эту библиотеку [link] (https://github.com/j2esu/rv-joiner) или попробовать ** recyclerview ** с несколькими типами просмотров –

+0

Не нужно использовать LinearLayout для вашей функциональности. GridLayoutManager может работать как линейный, так и сетчатый. проверьте ссылку: http://stackoverflow.com/questions/30808225/dynamically-change-the-number-of-columns-of-a-gridlayoutmanager –

+0

У меня есть обновленный вопрос, можете ли вы проконсультироваться по этому вопросу, используя только GridLayout Менеджер покажет только Grid-карту, но не карты LinearLayout – Mohtashim

ответ

8

вы можете просто использовать GridLayout с различным viewType для достижения этой цели.

mLayoutManager = new GridLayoutManager(getActivity(), 2); 
    mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
     @Override 
     public int getSpanSize(int position) { 
      switch (adapter.getItemViewType(position)) { 
       case MenuAdapter.ITEM: 
        return 1; 
       case MenuAdapter.FULLSIZE: 
        return 2; 
       default: 
        return 1; 
      } 
     } 
    }); 
    recyclerView.setLayoutManager(mLayoutManager); 

Где ЭЛЕМЕНТ сетки (2x столбец), то возвращается значение 1, в противном случае величину возврата 2 (2x занимает столбец сетки).

надеюсь, что это поможет.

+0

Спасибо за ответ, Еще немного информации, setSpanSizeLookup не разрешает – Mohtashim

+0

Реализовал его Man Thaaaaaaank You So much, Excellent work: D его работа в соответствии с результатом – Mohtashim

+0

рад, что я могу помочь :) – Damian

Смежные вопросы