Я что-то упускаю. Я наложил несколько слоев ExpandableGroup Items, и первые два слоя работают нормально, но когда я пытаюсь получить доступ к третьему уровню, ничего не происходит. Я просмотрел отладчик, и элементы собраны, но они не отображаются в представлении. Они появляются, если я помещаю section.add
во внешнюю группу ExpandableGroup, но они должны быть в самой внешней группе; если я добавляю группу в другом месте, она добавляет еще одну группу в конец списка, что и должно быть.
То, что я ищу, это
Item
SubItem
SubSubItem <- This one is a clickable item, which works if it's added to the Item group.
class Stores : AppCompatActivity() {
private lateinit var userListenerRegistration: ListenerRegistration
private var shouldInitCategoryRecyclerView = true
private val groupAdapter = GroupAdapter<GroupieViewHolder>()
private var storeSection = Section()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_stores)
userListenerRegistration =
FirestoreUtil.addCategoryListener(this::updateCategoryRecyclerView)
}
override fun onDestroy() {
super.onDestroy()
FirestoreUtil.removeListener(userListenerRegistration)
shouldInitCategoryRecyclerView = true
}
private fun updateCategoryRecyclerView(items: List<Item>) {
fun init() {
recycler_view_categories.apply {
layoutManager = LinearLayoutManager(this@Stores)
adapter = groupAdapter.apply {
setOnItemClickListener(onItemClick)
}
}
for (item in items) {
if (item is CategoryItem) {
ExpandableGroup(item, false).apply {
userListenerRegistration =
FirestoreUtil.addSubCategoriesListener(
item.category.categoryName
) { subCategories ->
for (subCategory in subCategories) {
if (subCategory is SubCategoryItem) {
add(Section(subCategory))
ExpandableGroup(subCategory, false).apply {
userListenerRegistration =
FirestoreUtil.addStoreListener(
item.category.categoryName,
subCategory.subCategory.subCategoryName,
this@Stores
) { stores ->
for (store in stores) {
if (store is StoreItem) {
add(Section(store))
}
}
}
}
}
}
}
groupAdapter.add(this)
}
}
}
shouldInitCategoryRecyclerView = false
}
fun updateItems() = storeSection.update(items)
if (shouldInitCategoryRecyclerView)
init()
else
updateItems()
}
private val onItemClick = OnItemClickListener { item, view ->
if (item is StoreItem) {
Toast.makeText(this, item.store.storeName, Toast.LENGTH_SHORT).show()
}
}
}
Звонки FirestoreUtil
, получение данных из Firestore и их отображение, я заставил его работать так, как я хотел, но последний вызов stores
не возвращает значение, которое отображается в приложении. Кажется, что данные получены, но они не отображаются.