2016-07-20 4 views
1

Я использую RecyclerView, который отображает список различных категорий. Каждый элемент строки также содержит RecyclerView, чтобы отобразить список предметов. Родитель RecyclerView населен вертикальным LinearLayoutManager, а ребенок RecyclerViews заселен GridLayoutManager (2 колонки). Ребенок RecyclerViews не показывает все предметы категории, кроме первых 2, даже если у него много предметов категории. Все остальные предметы категории скрываются для определенной категории. Другими словами, вы можете сказать, что ребенок RecyclerView не расширяет столько, сколько он содержит.Android RecyclerView внутри RecyclerView?

Здесь я нашел другое решение, но никто не работал. Вот почему публикация снова.

+0

Вы должны использовать только один переробочик Посмотреть. Предоставьте больше кода изображения с результатом, и я попытаюсь объяснить больше. –

+0

Даже если у вас может быть вложенный recyclerview, вы не сможете прокручивать его без дополнительной работы. –

+1

У вас есть вложенные RecyclerViews (взорвался, когда я это услышал) ... но эта проблема не может быть решена без совместного использования кода. – Booger

ответ

1

Вы можете легко достичь этого с помощью только одного RecyclerView, используя этот library. Смотрите рисунок ниже:

enter image description here

Сначала нужно создать класс Раздел:

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

Я использовал эту библиотеку, и она отлично работала, но немного вялена. Теперь я хочу добавить дополнительную нагрузку (хочу загрузить больше записей с сервера) в этот список recyclerview. Как я могу сделать его гладким и достичь разбивки на страницы? – momersaleem

+0

1) создайте метод «addItem» в вашем классе MySection, чтобы добавить новые элементы в свой список; 2) Добавьте элементы в свой раздел, используя метод «addItem»; 3) вызвать notifyDataSetChanged из разделаAdapter; – Gustavo

+0

Я не просил об этом. Я хотел знать, как узнать, что мой список достиг внизу в списке прокрутки, чтобы я мог вызвать api для получения записей следующей страницы с сервера? Я знаю, как добавлять новые элементы в список. Не могли бы вы также помочь мне сделать ее гладкой, потому что она немного вялена. – momersaleem