Использование библиотеки Group ie для создания вложенной ExpandableGroup в Android с Firestore - PullRequest
2 голосов
/ 19 июня 2020

Я что-то упускаю. Я наложил несколько слоев 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 не возвращает значение, которое отображается в приложении. Кажется, что данные получены, но они не отображаются. This is what the view looks like This second one has a highlighted Item in blue. That should trigger it to display the stores, but it doesn't

...