onTabSelected вернуть нулевую вкладку - PullRequest
0 голосов
/ 10 июля 2019

У меня проблема с моим TabLayout. Я создал пользовательский вид для своей вкладки, включающий TextView и ImageView, и у меня есть TabLayout.OnTabSelectedListener. проблема в том, что я меняю гарнитуру моего TextView метода on my onTabSelected, но каждый раз, когда я запускаю код, он кажется пустым. после перехода на другие вкладки все работает нормально! Можете ли вы помочь мне понять проблему. Я думаю, что есть проблема синхронизации между настройкой пользовательского представления вкладки, адаптера и слушателя. Вот мой код:


    private val root: ViewGroup = parent.inflate(R.layout.container)
    private val tabs by lazy { root.tab_layout }
    private val pager by lazy { root.view_pager }
    private val component1: Component1 by lazy {Component1()}
    private val component2: Component2 by lazy {Component2()}

    override fun onAttach() {
        val tabList: List<Component> = listOf(
            component1,
            component2
        )
        tabs.setSelectedTabIndicatorColor(ContextCompat.getColor(view.context,R.color.grey))
        tabs.setupWithViewPager(pager)
        tabs.addOnTabSelectedListener(tabSelectedListener)
        pager.adapter = ScreenAdapter(tabList)
        setupCustomTabs(tabList)
    }

    override fun onDetach() {
        tabs.clearOnTabSelectedListeners()
        tabs.removeAllTabs()
    }

    private fun setupCustomTabs(tabList: List<Component>) {
        for (i in tabList.indices) {
            val customTab = LayoutInflater.from(root.context).inflate(R.layout.component_tab, null)
            customTab.tab_text.text = tabList[i].title
            customTab.tab_icon.setImageDrawable(tabList[i].icon)
            tabs.getTabAt(i)?.customView = customTab
        }
    }

    private val tabSelectedListener: TabLayout.OnTabSelectedListener = object : TabLayout.OnTabSelectedListener {
        override fun onTabReselected(tab: TabLayout.Tab?) {}
        override fun onTabUnselected(tab: TabLayout.Tab?) {
            if (tab != null){
                val tabTextView = tab.customView?.tab_text
                tabTextView?.setTextColor(ContextCompat.getColor(view.context,R.color.grey_9999AB))
                tabTextView?.setTypeface(null, Typeface.NORMAL)
            }
        }
        override fun onTabSelected(tab: TabLayout.Tab?) {
            if (tab != null) {
                val tabTextView = tab.customView?.tab_text
                tabTextView?.setTextColor(ContextCompat.getColor(view.context,R.color.grey))
                tabTextView?.tab_text?.setTypeface(tabTextView.typeface, Typeface.BOLD)
            }
        }
    }


class ScreenAdapter<T>(private val tabs: List<T>) : PagerAdapter() {

    override fun instantiateItem(container: ViewGroup, position: Int): Any = run {
        val vc = tabs[position]
        container.attach(vc)
        return vc.view
    }

    override fun destroyItem(container: ViewGroup, position: Int, obj: Any) = container.detach(tabs[position])
    override fun getPageTitle(position: Int): CharSequence? = null
    override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
    override fun getCount(): Int = tabs.size
}
...