2016-07-20 6 views
1

다른 카테고리 목록을 표시하는 RecyclerView을 사용하고 있습니다. 각 행 항목에는 카테고리 항목의 목록을 표시하는 RecyclerView도 포함되어 있습니다. 부모 RecyclerViewLinearLayoutManager으로 채워지고 자식 RecyclerViewsGridLayoutManager (2 열)로 채워집니다. 하위 RecyclerViews은 카테고리 항목이 많아도 처음 2를 제외한 모든 카테고리 항목을 표시하지 않습니다. 나머지 범주 항목은 특정 범주에 대해 숨어 있습니다. 즉, 어린이 RecyclerView이 포함 된 항목만큼 확장되지 않는다고 말할 수 있습니다.RecyclerView 내부 Android RecyclerView?

여기에 다른 해결책이 있지만 아무도 작동하지 않았습니다. 그래서 다시 게시하는 것입니다.

+0

당신은 하나 개의 재활용을 사용할 필요가

enter image description here

먼저이 부분 클래스를 생성 : 아래 이미지 참조 전망. 더 많은 이미지 코드를 결과로 제공하면 더 자세히 설명하려고 시도 할 것입니다. –

+0

중첩 된 recyclerview를 사용할 수 있더라도 몇 가지 추가 작업 없이는 스크롤 할 수 없습니다. –

+1

당신은 중첩 된 RecyclerViews를 가질 수 있습니다. (들었을 때 내 마음을 아프게했습니다.)하지만이 문제는 코드를 공유하지 않으면 해결 될 수 없습니다. – Booger

답변

1

library을 사용하면 하나의 RecyclerView 만 있으면 쉽게 얻을 수 있습니다. 그런 다음

class MySection extends StatelessSection { 

    String title; 
    List<String> list; 

    public MySection(String title, 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.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 MyHeaderViewHolder(view); 
    } 

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

     // bind your header view here 
     headerHolder.tvItem.setText(title); 
    } 
} 

당신이 당신의 섹션으로 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("Categories 1", categories1DataList); 
MySection section2 = new MySection("Categories 2", categories2DataList); 

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

// 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

나는이 라이브러리를 사용했지만 훌륭하게 작동했지만 조금은 잘랐다. 이제 load (서버에서 더 많은 레코드를로드하려는) 기능을이 recyclerview 목록에 추가하려고합니다. 어떻게하면 매끄럽게 만들고 페이지 매김을 할 수 있습니까? – momersaleem

+0

1) MySection 클래스에 "addItem"메서드를 만들어 목록에 새 항목을 추가합니다. 2) "addItem"메소드를 사용하여 섹션에 항목을 추가하십시오. 3) sectionAdapter의 notifyDataSetChanged를 호출합니다. – Gustavo

+0

나는 이것을 요구하지 않았다. 나는 서버에서 다음 페이지 레코드를 가져 오기위한 api를 호출 할 수 있도록 내 목록이 스크롤의 맨 아래에 어떻게 도달했는지 어떻게 알 수 있습니까? 목록에 새 항목을 추가하는 방법을 알고 있습니다. 조금 움직이지 않아 부드럽게 만들 수있게 도와 주실 수 있습니까? – momersaleem