2

我基本上嘗試實現這一設計原理(from Google's Material Design): enter image description here 因此我做了父母RecyclerViewLinearLayoutManager,然後在RecyclerView適配器,我已經把孩子RecyclerView與「富媒體」部分的GridLayoutManager(動作區域2)。一切工作正常,除了我已經設置內部RecyclerView電網有match_parent寬度和高度wrap_content的事實,但它不能正確計算內容的大小,在0 &從而隱藏看似離開它。如果我將子女RecyclerView設置爲特定高度,則項目會顯示在內,但當然會在底部切斷。 其他人似乎碰到過這個問題,but in their case, both have linear layouts。 (另見"Khay's" answer here。)RecyclerView與GridLayoutManager內RecyclerView與LinearLayoutManager

現在我的問題是,如何將一個覆蓋onMeasure方法「pptang」沒有在上面的鏈接問題的接受的答案,但定製GridLayoutManager而不是自定義LinearLayoutManager內?我還沒有張貼了我的代碼在這裏,因爲它本質上是相同的一個鏈接,只是我需要做一個自定義的GridLayoutManager而不是爲孩子RecyclerView,以便正確措施「pptang的」接聽的狀態。

否則,有沒有更好的辦法,而不是使用1個RecyclerView第2個RecyclerView裏面?只有1 RecyclerView可以填充的活性/片段都與上述CardViews的列表和獨特的項目每個CardView內的電網?

+0

裝飾根據材料設計指南「限制的補充措施,以兩個動作」。你想在父列表中添加多少項?滾動如何工作?網格和列表都使用垂直滾動? – masp

+0

我想有幾個'ViewPager'選項卡;一個帶有3個父親'CardViews',另一個帶有8個父親'CardViews',另一個帶有大約5個父親'CardViews'。目的是爲了網格完全「打開」,因此,不需要內部滾動,並且只能爲父CardViews垂直滾動。根據我所看到的,在另一個裏面有一個'RecyclerView'也會干擾工具欄的隱藏('CoodinatorLayout'),如果你想通過按住RecyclerView的網格進行滾動,工具欄不會隱藏,隱藏在孩子外面的某個地方'RecyclerViews' – inferKNOX

+0

我想我可能已經與您實際詢問的@masp相切了。抱歉。在個人CardViews中,我只想在頂部標題和圖標,中心網格以及用於隱藏一些支持文本的「擴展器」。可能還要讓Cardview的頭部分能夠隱藏/摺疊並顯示/展開網格,就像「ExpandableListView」一樣。 – inferKNOX

回答

1

您可以使用該庫SectionedRecyclerViewAdapter只有一個RecyclerView構建它。

您可以找到以下here圖像的例子的完整代碼。

enter image description here

首先創建一個科類:

class MySection extends StatelessSection { 

    String title; 
    String subtitle; 
    List<String> list; 

    public MySection(String title, String subtitle, List<String> list) { 
     // call constructor with layout resources for this Section header, footer and items 
     super(R.layout.section_header, R.layout.section_item); 

     this.title = title; 
     this.subtitle = subtitle; 
     this.list = list; 
    } 

    @Override 
    public int getContentItemsTotal() { 
     return list.size(); // number of items of this section 
    } 

    @Override 
    public RecyclerView.ViewHolder getItemViewHolder(View view) { 
     // return a custom instance of ViewHolder for the items of this section 
     return new MyItemViewHolder(view); 
    } 

    @Override 
    public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { 
     MyItemViewHolder itemHolder = (MyItemViewHolder) holder; 

     // bind your view here 
     itemHolder.tvItem.setText(list.get(position)); 
    } 

    @Override 
    public RecyclerView.ViewHolder getHeaderViewHolder(View view) { 
     return new SimpleHeaderViewHolder(view); 
    } 

    @Override 
    public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) { 
     MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder; 

     // bind your header view here 
     headerHolder.tvTitle.setText(title); 
     headerHolder.tvSubTitle.setText(subtitle); 
    } 
} 

然後您設置RecyclerView與節:

// Create an instance of SectionedRecyclerViewAdapter 
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); 

// Create your sections with the list of data for each year 
MySection section1 = new MySection("Title", "Subhead", firstDataList); 

// Add your Sections to the adapter 
sectionAdapter.addSection(section1); 

// Set up your RecyclerView with the SectionedRecyclerViewAdapter 
GridLayoutManager glm = new GridLayoutManager(getContext(), 2); 
glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
    @Override 
    public int getSpanSize(int position) { 
     switch(sectionAdapter.getSectionItemViewType(position)) { 
      case SectionedRecyclerViewAdapter.VIEW_TYPE_HEADER: 
       return 2; 
      default: 
       return 1; 
     } 
    } 
}); 
recyclerView.setLayoutManager(glm); 
recyclerView.setAdapter(sectionAdapter); 
+0

我明白你的意思,這實際上是我以前,從[這裏](http://blog.sqisland .COM/2014/12/recyclerview柵與 - header.html中)。但這並不是我想要的,我真的希望'CardView'成爲部分,其中的元素就像Google自己說明的那樣,並且這些'CardViews'本身就在'RecyclerView'中。如何才能做到與谷歌顯示的結果一樣? – inferKNOX

+0

還有更簡單的庫支持使用自定義佈局管理器[RendererRecyclerViewAdapter](https://github.com/vivchar/RendererRecyclerViewAdapter)的嵌套回收站視圖,請參閱CompositeViewRenderer。也請在這個答案https://stackoverflow戰利品。com/a/48464993/4894238 – Vitaly

0

綜上所述。 您不應該在回收站內使用回收站。你需要實現一個自定義的gridLayoutManager。爲了達到這個閱讀這些:

從文檔https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ItemDecoration.html

的ItemDecoration允許應用程序添加偏移量從適配器的數據設置特定項目視圖的特殊的繪圖和佈局。這對於項目的亮點,視覺分組邊界多間繪製分隔有用。

所以,如果你使用上面這個http://blog.sqisland.com/2014/12/recyclerview-grid-with-header.html一起你絕對可以實現你在找什麼。只需將您從材質指南中呈現的圖像視爲您的gridLayoutManager中的一個組。

  • 你可以有不同類型的視圖
  • 每一行可能有多個視圖
  • 每一行可能有不同的
+0

我明白你的意思,並同意'RecyclerView'內的RecyclerView是錯誤的。但是,將它們與邊界進行分組只會達到與上述類似的結果,而不是相同的結果,因爲這是實際的「CardView」,而不僅僅是一個分組。那麼問題就變成了,我們如何從簡單的分組到實際的'CardViews'? – inferKNOX

相關問題