我在 viewpager 2 中遇到了一个关于片段的小问题,所以基本上我想在 viewpager 中获取当前可见的片段,然后执行一些操作,但是我尝试了很多方法但最终没有成功,如果有的话可以显示我有办法做,我非常感谢,提前谢谢你。
if(binding.mainViewPager.currentItem == 0){
sharedViewModel.setQuery(newText?.toLowerCase()!!)
} else {
sharedViewModel.setQuery(newText?.toLowerCase()!!)
}
答案 0 :(得分:0)
能够通过使用自定义适配器查看寻呼机来获取当前 Fragment。在 Activity 的 onCreate() 中调用以下方法。
private fun initViewPager() {
try {
viewPager.adapter?.let { viewPager.adapter = null }
val customAdapter =
CustomViewPagerAdapter(supportFragmentManager).apply {
this.addFragment(FirstFragment())
this.addFragment(SecondFragment())
this.addFragment(ThirdFragment())
viewPager.adapter = this
}
viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener{
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
}
override fun onPageSelected(position: Int) {
Log.d("log==>>","Selected Page number= $position")
when(position) {
1 -> {
Log.d("log==>>","Current visible fragment code= 1")
customAdapter.updateFragmentCode(1)
}
}
}
override fun onPageScrollStateChanged(state: Int) {
}
})
//viewPager.setOnTouchListener { v, event -> true }
} catch (error: Exception) {
Log.d("log==>>", "Error : initViewPager()", error)
}
}
我已经在我的自定义适配器类中存储了片段,然后将当前片段与我已经从上面的侦听器获得的当前页码映射。我的自定义适配器看起来像 :-
class CustomViewPagerAdapter(supportFragmentManager: FragmentManager) : FragmentStatePagerAdapter(supportFragmentManager) {
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
}
override fun getPageTitle(position: Int): CharSequence? {
return mFragmentTitleList[position]
}
fun addFragment(fragment: Fragment) {
mFragmentList.add(fragment)
}
fun updateFragmentByCurrentPageNumber(fragmentNumber: Int){
when(fragmentNumber){
1 -> {
(mFragmentList[1] as FirstFragment).showLog() // Can call any method inside First Fragment
}
2 -> {
(mFragmentList[2] as SecondFragment).showLog() // Can call any method inside Second Fragment
}
}
}
}