@Dmtm
Android

Почему ViewPager2 удваивает логи?

Небольшой демо проект, два модуля - app и lib
class TabFragmentAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) {
    private val fragments = listOf(ConnectFragment(), SendFragment(), UserLogFragment(), SocketLogFragment())
    private val titles = listOf("Connect","Send","User log","Socket log")
    override fun getItemCount(): Int = titles.size

    override fun createFragment(position: Int): Fragment {
        Timber.d("createFragment called, position: $position")
        return fragments[position]
    }

    fun getTitle(position: Int): String {
        return titles[position]
    }
}

MainActivity
val viewPager = findViewById<ViewPager2>(R.id.pager)
        val tabFragmentAdapter = TabFragmentAdapter(this)
        viewPager.adapter = tabFragmentAdapter
        val tabs = findViewById<TabLayout>(R.id.idTabLayout)
        TabLayoutMediator(tabs,
 viewPager) { tab, position -> 
            tab.text = tabFragmentAdapter.getTitle(position)
        }.attach()

все вроде бы стандартно
но
в логах
Активити создается один раз
12:40:09.867 MainActivity            onCreate called, this: ***.MainActivity@be5921a

Как только доходит до пейджера - логи удваиваются
12:40:10.121 TabFragmentAdapter      createFragment called, position: 0
12:40:10.121 TabFragmentAdapter      createFragment called, position: 0

12:40:10.161 ConnectFragment         onAttach called, this: ConnectFragment{e7c6b82} (ff5aac30-97cd-4606-bd1b-d4ec0a6040b0 tag=f0)
12:40:10.162 ConnectFragment         onAttach called, this: ConnectFragment{e7c6b82} (ff5aac30-97cd-4606-bd1b-d4ec0a6040b0 tag=f0)
12:40:10.165 ConnectFragment         onCreate called, this: ConnectFragment{e7c6b82} (ff5aac30-97cd-4606-bd1b-d4ec0a6040b0 tag=f0)
12:40:10.168 ConnectFragment         onCreate called, this: ConnectFragment{e7c6b82} (ff5aac30-97cd-4606-bd1b-d4ec0a6040b0 tag=f0)

12:40:10.242 ConnectFragment         onViewCreated called, this: ConnectFragment{e7c6b82} (ff5aac30-97cd-4606-bd1b-d4ec0a6040b0 tag=f0)
12:40:10.244 ConnectFragment         onViewCreated called, this: ConnectFragment{e7c6b82} (ff5aac30-97cd-4606-bd1b-d4ec0a6040b0 tag=f0)

12:52:02.160 Transmissi...er$connect launch socket error listener, datagramSocketManager = библиотека.DatagramSocketManager@a701a9b
12:52:02.161 Transmissi...er$connect launch socket error listener, datagramSocketManager = библиотека.DatagramSocketManager@a701a9b


и когда я в этом фрагменте нажимаю кнопку и обращаюсь к библиотеке- библиотечные логи тоже удваиваются
и при всем этом - фрагменты в одном экземпляре и в библиотеке адреса совпадают
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
С конкретным приведённым кодом всё в порядке, проблема явно где-то там, где мы не видим.

Удваивает логи скорее всего не ViewPager2, а Timber. Это можно проверить заменив Timber.d на обычный Log.d. Если логи больше не удваиваются, значит проблема с конфигурацией Timber-а.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы