Я использую следующий класс адаптера для ViewPager
. Он был преобразован в Котлин из java.
class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) { private val mFragmentList = ArrayList<Fragment>() private val mFragmentTitleList = ArrayList<String>() override fun getItem(position: Int): Fragment { return mFragmentList[position] } override fun getCount(): Int { return mFragmentList.size } fun addFragment(fragment: Fragment, title: String) { mFragmentList.add(fragment) mFragmentTitleList.add(title) } override fun getPageTitle(position: Int): CharSequence? { return mFragmentTitleList[position] } }
Чтобы свести к минимуму количество строк, я попытался использовать Pair
Kotlin. И преобразуйте приведенную выше реализацию в следующую. Теперь мне интересно узнать о производительности этой реализации, используя Pair
. Могу ли я получить логическое объяснение по этому поводу?
class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) { private val pairs = ArrayList<Pair<Fragment, String>>() fun addFragment(fragment: Fragment, title: String) = pairs.add(Pair(fragment, title)) override fun getItem(position: Int): Fragment = pairs[position].first override fun getCount(): Int = pairs.size override fun getPageTitle(position: Int): CharSequence? = pairs[position].second }
Использование Pair
явно улучшает читаемость и ремонтопригодность, поэтому идите с этим.
Но я бы даже пошел дальше использовать Map
вместо этого, если бы не было ограничения, что вам нужно получить доступ к элементам через индекс ( getItem(position: Int)
).
private val fragmentToTitleMap = HashMap<Fragment, String>()
Добавьте к этому:
fragmentToTitleMap[someFragment] = "someTitle"
Не думайте слишком много о микро-оптимизации. В этом случае не должно быть заметной разницы, так как у вас не будет +100 фрагментов.