Multi-расширяемый recyclerview

Я пытаюсь реализовать свой собственный многократно расширяемый RecyclerView, который работает нормально для одного подэлемента, но когда я хочу, чтобы суб-подпункт отображал вид, но мне нужно щелкнуть по нему несколько раз. Пример иерархии:

Title1 SubTitle1 SubTitle2 SubTitle3 SubSubTitle1 SubSubTitle2 Title2 ... 

EDIT: Проблема заключается только в SubTitle для отображения SubSub'sItem. Я думаю, мне нужно уведомить родительский адаптер, что мой взгляд изменился, но я не работаю.

Для этого я использовал RecyclerView с itemLayout, у которых тоже есть RecyclerView, и когда я нажимаю элемент, я устанавливаю адаптер у дочернего RecyclerView. Я использую пользовательский LinearLayoutManager, который я нашел здесь https://stackoverflow.com/a/29261667/3289338 .

Мой onBindViewHolder:

 @Override public void onBindViewHolder(final DrawerViewHolder holder, final int position) { if (holder.type == TYPE_EXPANDABLE_ITEM) { final ItemDrawer item; if (header) { item = itemDrawers.get(position - 1); } else { item = itemDrawers.get(position); } holder.textView.setText(item.getTitle()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (item.isOpen()) { item.setOpen(false); holder.recyclerView_child.setVisibility(View.GONE); notifyItemChanged(position); } else { item.setOpen(true); holder.recyclerView_child.setVisibility(View.VISIBLE); holder.recyclerView_child.setAdapter(new DrawerAdapter(item.getSubItem(), drawer, fragmentManager, false)); holder.recyclerView_child.setLayoutManager(new MyLinearLayoutManager(holder.itemView.getContext().getApplicationContext())); notifyItemChanged(position); } } }); } else if (holder.type == TYPE_SIMPLE_ITEM) { final ItemDrawer item; if (header) { item = itemDrawers.get(position - 1); } else { item = itemDrawers.get(position); } holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (item.isActivity()) { holder.itemView.getContext().startActivity(item.getActivityIntent()); } else { fragmentManager.beginTransaction().replace(R.id.drawer_frame_layout, item.getFragment()).commit(); } } }); } else { //header } } 

И макет:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="?attr/selectableItemBackground" android:paddingBottom="8dp" android:paddingTop="8dp"> <ImageView android:id="@+id/imageView_drawer_row_expandable" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="16dp" android:src="@drawable/ic_drawer" /> <TextView android:id="@+id/textView_drawer_row_expandable" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toEndOf="@id/imageView_drawer_row_expandable" android:paddingStart="12dp" android:paddingTop="4dp" android:textAppearance="?android:attr/textAppearanceMedium" /> <ImageButton android:id="@+id/imageView_drawer_row_expandable_open" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:background="#00000000" android:paddingEnd="16dp" android:src="@android:drawable/arrow_up_float" /> </RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView_drawer_child" android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" android:background="#ffffff" android:paddingStart="16dp" android:scrollbars="vertical" android:visibility="gone" /> </LinearLayout> 

Thanx.

https://github.com/itsnothingg/RecursiveRecyclerView

Я сделал для этого открытый источник. Вы можете легко реализовать многоуровневое использование recyclerview и использовать разную компоновку для каждой расширяющейся глубины.

Intereting Posts