Выбор предыдущей вкладки остается активным после выбора другой вкладки - PullRequest
0 голосов
/ 14 мая 2018

У меня есть TabLayout, который я хотел бы настроить следующим образом:

  • Если элемент вкладки не выбран, отображается только значок
  • Если выбран элемент вкладки, должен отображаться значок и текст

Я реализовал OnTabSelectedListener и установил текст на null, когда вкладка не выбрана в качестве выбранной. Когда я запускаю текст на «невыбранной» вкладке, она удаляется, но вкладка остается в активном состоянии, как показано на этом рисунке: image

Код:

tabs.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener{
            override fun onTabReselected(p0: TabLayout.Tab?) {

            }

            override fun onTabUnselected(tab: TabLayout.Tab?) {
                // If I remove this the problem is resolved.
                tab?.text = null
            }

            override fun onTabSelected(tab: TabLayout.Tab?) {
               tab?.text = "Selected"
            }

        })

XML

<com.google.android.material.tabs.TabLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabInlineLabel="true"
    app:tabMode="scrollable"
    app:tabGravity="fill">

    <com.google.android.material.tabs.TabItem
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_attach_money_black_24dp"
        android:text="Selected" />
    <com.google.android.material.tabs.TabItem
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_attach_money_black_24dp" />
    <com.google.android.material.tabs.TabItem
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_attach_money_black_24dp"
        />
    <com.google.android.material.tabs.TabItem
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_attach_money_black_24dp" />
    <com.google.android.material.tabs.TabItem
        style="@style/Widget.MaterialComponents.TabLayout.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:icon="@drawable/ic_attach_money_black_24dp"
        />

</com.google.android.material.tabs.TabLayout>

Я попробовал все, что в моих силах, чтобы найти решение, но безрезультатно.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Это исправлено внутри и скоро выйдет в новой версии библиотеки дизайна материалов.

Суть проблемы в том, что внутренне выбранная вкладка не обновляется до вызова onTabUnselected(). Затем, установив текст для вкладки в этом методе, он также неправильно обновляет старую выбранную вкладку.

0 голосов
/ 16 мая 2018

Я нашел способ обойти проблему. Я звоню updateTabs() в onTabSelected(). Вот метод:

private fun updateTabs(){
        for (i in 0 until tabs.tabCount){
            tabs.getTabAt(i)?.let {
                it.icon = ActivityCompat.getDrawable(this,tabIcons[i])
                if( it.isSelected){
                    it.text = tabTitles[i]
                }else{
                    it.text = null
                }
            }
        }
    }
...