У меня есть проект, в котором я использую 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.
Кто угодно? Любые идеи? Проблемы жизненного цикла?
С уважением Штеффен
Settings
, вы попадете на нужную страницу? Я считаю, что viewPager не пытается воссоздавать фрагменты, если в этом нет необходимости. Таким образом, есть вероятность, что фрагмент уже создан, а getItem не вызывается внутри ViewPager. - person Chris Sullivan   schedule 12.01.2019