android - ViewPager 在使用前激活它的片段
问题描述
我正在使用 ViewPager 作为选项卡在不同的片段之间滑动。我注意到,仅通过创建适配器,每个片段中的 onCreateView 函数就会立即被调用,这并不好,因为我想在特定的给定时间运行这些函数中的代码。
我在 MainActivity 中的代码:
private var profileTab: TabLayout.Tab? = null
private var swipeTab: TabLayout.Tab? = null
private var matchesTab: TabLayout.Tab? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
profileTab = navigationTabs.newTab()
swipeTab = navigationTabs.newTab()
matchesTab = navigationTabs.newTab()
navigationTabs.addTab(profileTab!!)
navigationTabs.addTab(swipeTab!!)
navigationTabs.addTab(matchesTab!!)
val adapter = PagerAdapter(supportFragmentManager, navigationTabs.tabCount)
fragmentContainer.adapter = adapter
我的 PagerAdapter.kt 代码:
class PagerAdapter (fm: FragmentManager, private val mNoOfTabs: Int) : FragmentStatePagerAdapter(fm, mNoOfTabs) {
override fun getItem(position: Int): Fragment {
when (position) {
0 -> {
return ProfileFragment()
}
1 -> {
return SwipeFragment()
}
2 -> {
return MatchesFragment()
}
}
return null!!
}
override fun getCount() = mNoOfTabs
}
在 activity_main.xml 中(如果重要的话):
<com.google.android.material.tabs.TabLayout
android:id="@+id/navigationTabs"
android:layout_width="match_parent"
android:layout_height="@dimen/navigation_height"
android:background="@drawable/navigation_shadow"
app:layout_constraintTop_toTopOf="parent"
app:tabIndicator="@null"
app:tabMinWidth="@dimen/navigation_height"
app:tabRippleColor="@null" />
<!-- // the fragment will be displayed here:-->
<androidx.viewpager.widget.ViewPager
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/navigationTabs"/>
这是默认行为吗?可以防止它,使碎片不会立即启动吗?
解决方案
ViewPager 将至少初始化两个片段。ViewPager 允许我们设置setOffscreenPageLimit()
,但它至少需要 1,因此它将初始化第一个和下一个片段。在这里阅读更多ViewPager.setOffscreenPageLimit(0) 不能按预期工作
尝试通过onPageChangedListener()
在 MainActivity 中设置来调用 Fragment 中的代码,以便在用户滑动/打开 Fragment 时执行代码。
推荐阅读
- python - 如何在这里获取所有数据的前缀
- javascript - 傀儡师选择链接
- javascript - 当 Step 为 0.25 时如何使 jQuery UI Slider 更平滑
- python - 行选择和 loc 屏蔽和切片在一个命令中
- typescript - TypeScript 在线编译器 _extends 失败(实际上并未扩展)
- python - 识别出现在不到 1% 的语料库文档中的单词
- ios - 圆形动画滞后
- c++ - 使用指针用过滤器重写 char 数组
- memory - 比较内存镜像与 ECC
- firebase - 在现有 Firebase 项目目录中初始化 firebase CLI 功能