Cómo implementar elementos expandibles con LinearLayoutManager (introducido con Android L)

RecyclerView ha sido introducido con Android L y forma parte de la biblioteca AppCompat v7. Entonces decidí actualizar mi aplicación con este nuevo RecyclerView para reemplazar mi ListView . Para ello, cuando se trata de establecer un LayoutManager para el RecyclerView , estoy usando el LinearLayoutManager , que funciona bien.

Aquí está lo difícil: cuando quiero cambiar mi ExpandableListView a un RecyclerView . Dado que Google no ha creado un " ExpandableLayoutManager ", esto es bastante complicado y no puedo lograrlo.

La documentación menciona a los niños, pero parece ser que los niños de la visión de la raíz de la RecyclerView no de los propios niños.

¿Tiene alguien una solución o algunas pistas sobre él? O al menos alguna información como por dónde empezar para poder implementar mi propio LayoutManager .

Gracias,

Esta biblioteca le ayuda a agrupar sus elementos en "secciones" y, a continuación, puede implementar la funcionalidad de expansión / contracción que sigue en este ejemplo .

Primero crea su clase de sección:

 class MySection extends StatelessSection { String header; List<String> list; boolean expanded = true; public MySection(String header, List<String> list) { // call constructor with layout resources for this Section header and items super(R.layout.section_header, R.layout.section_item); this.myHeader = header; this.myList = list; } @Override public int getContentItemsTotal() { return expanded? list.size() : 0; } @Override public RecyclerView.ViewHolder getHeaderViewHolder(View view) { return new HeaderViewHolder(view); } @Override public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) { final HeaderViewHolder headerHolder = (HeaderViewHolder) holder; headerHolder.tvTitle.setText(title); headerHolder.rootView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { expanded = !expanded; headerHolder.imgArrow.setImageResource( expanded ? R.drawable.ic_keyboard_arrow_up_black_18dp : R.drawable.ic_keyboard_arrow_down_black_18dp ); sectionAdapter.notifyDataSetChanged(); } }); } @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)); } } 

A continuación, cree la instancia de sus secciones y configure su adaptador:

 // Create an instance of SectionedRecyclerViewAdapter SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); // Add your Sections sectionAdapter.addSection(new MySection("Section 1", Arrays.asList(new String[] {"Item 1", "Item 2", "Item 3", "Item 4" }))); sectionAdapter.addSection(new MySection("Section 2", Arrays.asList(new String[] {"Item 1", "Item 2" }))); // Set up your RecyclerView with the SectionedRecyclerViewAdapter RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(sectionAdapter); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.