Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Kotlin for Android中使用Pair时的性能_Android_Kotlin_Tuples - Fatal编程技术网

在Kotlin for Android中使用Pair时的性能

在Kotlin for Android中使用Pair时的性能,android,kotlin,tuples,Android,Kotlin,Tuples,我一直在为ViewPager使用以下适配器类。它从java转换为Kotlin class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager) { private val mFragmentList = ArrayList<Fragment>() private val mFragmentTitleList = ArrayList<String>()

我一直在为ViewPager使用以下适配器类。它从java转换为Kotlin

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显然可以提高可读性和可维护性,所以就这样做吧

但是,如果不存在通过索引getItemposition:Int访问元素所需的约束,我甚至会进一步使用映射


不要过多考虑微观优化。在这种情况下,它不会有明显的区别,因为您不会有+100个片段。

您确定在使用适配器时存储片段是个好主意吗?也许您应该看看这个:我们需要定义哪些片段应该显示在viewpager中,上面的实现扩展FragmentPagerAdapter将促进这一点,并自行完成其他内部工作。我认为这是一个被广泛接受的实现,并且被大多数人使用。因为我们必须使用覆盖函数中使用的positionint值,所以我坚持使用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
}
private val fragmentToTitleMap = HashMap<Fragment, String>()
fragmentToTitleMap[someFragment] = "someTitle"