Kotlin Android Studio, вкладка выбрана неправильно

У меня есть проект, в котором я использую tablayout с помощью viewPager, следуя этому хорошему руководству https://medium.com/@eijaz/getting-started-with-tablayout-in-android-kotlin-bb7e21783761

Проблема в том, что я не могу нажать на нужную вкладку.

-MyPagerAdapter.kt

class MyPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {

   val fragmentList = listOf<Fragment>(ListFragment(), ScanFragment(), MinFragment(), SettingsFragment())

   override fun getItem(position: Int): Fragment {
    when (position) {
        0 -> {
            Log.d("Fragment", "Position: $position")
           return fragmentList[position]
        }
        1 -> {
            Log.d("Fragment", "Position: $position")
            return fragmentList[position]
        }
        2 -> {
            Log.d("Fragment", "Position: $position")
            return fragmentList[position]
        }
        3 -> {
            Log.d("Fragment", "Position: $position")
            return fragmentList[position]
        }
        else -> {
            throw IllegalArgumentException()
        }

    }
}

override fun getCount(): Int {
    return fragmentList.count()
}

override fun getPageTitle(position: Int): CharSequence {
    return when (position) {
        0 -> "Liste"
        1 -> "Scan"
        2 -> "Min"
        3 -> "Settings"
        else -> {
            throw IllegalArgumentException()
        }
    }
}
}

-MainActivity.kt

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val fragmentAdapter = MyPagerAdapter(supportFragmentManager)
    viewpager_main.adapter = fragmentAdapter

    mainTabbedLayout.setupWithViewPager(viewpager_main)
}
}

ListFragment.kt

class ListFragment : Fragment() {

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return inflater!!.inflate(R.layout.list_fragment, container, false)
}
}

-list_fragment.xml

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="no.some.domain.ListFragment">

    <TextView android:layout_width="match_parent" android:layout_height="match_parent"
        android:text="Liste"
        android:textSize="40sp"/>

</FrameLayout>

Когда приложение запускается, Logcat выдает следующее:

2019-01-12 20:11:50.701 400-400/no.some.domain D/Fragment: Position: 0
2019-01-12 20:11:50.701 400-400/no.some.domain D/Fragment: Position: 1

При нажатии на вкладку Scan Logcat выдает следующее:

2019-01-12 20:40:36.847 400-400/no.some.domain D/Fragment: Position: 2

При нажатии на вкладку Min Logcat выдает следующее:

2019-01-12 20:43:18.009 400-400/no.some.domain D/Fragment: Position: 3

При нажатии на вкладку «Настройки» Logcat ничего не выдает. Либо при повторном нажатии вкладки Min ничего не происходит, либо вкладка Scan.

Кто угодно? Любые идеи? Проблемы жизненного цикла?

С уважением Штеффен


person Steffen    schedule 12.01.2019    source источник
comment
Нажав на Settings, вы попадете на нужную страницу? Я считаю, что viewPager не пытается воссоздавать фрагменты, если в этом нет необходимости. Таким образом, есть вероятность, что фрагмент уже создан, а getItem не вызывается внутри ViewPager.   -  person Chris Sullivan    schedule 12.01.2019
comment
Спасибо, Крис. Да, нажав на вкладку «Настройки», я попаду на нужную страницу. Ваша ссылка помогла мне понять принцип работы ViewPager. Причина, по которой я рассматривал эту проблему, заключается в том, что я не могу запустить какую-либо функцию в представлении, которое я нажимаю. На двух вкладках мне нужно извлекать данные для заполнения представления переработчика каждый раз, когда я их нажимаю. У вас есть ссылка на это :-) Спасибо большое в любом случае!   -  person Steffen    schedule 13.01.2019
comment
Вы должны использовать что-то вроде developer.android.com/reference/android /support/v4/view/, чтобы определить, что страница переходит на индекс с вкладками. Тогда сделайте запрос. Однако для лучшего взаимодействия с пользователем вы можете выполнить некоторую предварительную загрузку внутри самих фрагментов, поскольку viewpager создает следующую вкладку.   -  person Chris Sullivan    schedule 14.01.2019