У меня есть проект, в котором я использую tablayout с использованием viewPager, следуя этому хорошему учебнику https://medium.com/@eijaz/getting-started-with-tablayout-in-android-kotlin-bb7e21783761
Проблема, с которой я столкнулся, заключается в том, что после создания экземпляров / фрагментов в представлениях больше ничего не происходит. Они действительно статичны. Я хочу заполнить представления переработчика данными, полученными с сервера. Не один раз, не дважды, но каждый раз, когда пользователь нажимает некоторые вкладки.
Я пытался найти ответ, но мне не повезло. Может быть, viewPager с фрагментами не должен меняться после инициализации?
-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)
}
}
-MyPagerAdapter.kt
class MyPagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(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()
}
}
}
}
-ListFragment.kt
class ListFragment : Fragment() {
val TAG = "ListFragment"
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater!!.inflate(R.layout.list_fragment, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
Log.d(TAG, "onViewCreated")
}
}
В MyPagerAdapter.kt установка FragmentStatePagerAdapter (не FragmentPagerAdapter) заставила представления перезагрузиться, если вы нажмете на вкладку достаточно далеко, но этого недостаточно. Я уже создал приложение, которое хочу создать в iOS, где специальные функции всегда запускаются при посещении в макете с вкладками. Разве это не возможно в этом случае?
Есть ли способ заставить новую инициализацию?