recyclerview - Cómo implementar elementos expandibles con LinearLayoutManager(introducido con Android L)
recyclerview android studio ejemplo (1)
Esta library ayuda a agrupar sus elementos en "secciones" y luego puede implementar la funcionalidad expandir / contraer que se example continuación en este example .
Primero creas tu 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));
}
}
Luego cree una 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);
RecyclerView
se ha introducido con Android L y forma parte de la biblioteca AppCompat v7. Entonces decidí actualizar mi aplicación con este nuevo RecyclerView
para reemplazar mis ListView
s. Para hacerlo, cuando se trata de configurar un LayoutManager
para RecyclerView
, estoy usando 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 documentation menciona a los niños pero parece ser hijos de la vista raíz de RecyclerView
no de los propios niños.
¿Alguien tiene una solución o alguna pista al respecto? O al menos alguna información como dónde comenzar para poder implementar mi propio LayoutManager
.