viewpager 2 中的当前可见片段

时间:2021-03-02 09:30:49

标签: android kotlin android-viewpager2

我在 viewpager 2 中遇到了一个关于片段的小问题,所以基本上我想在 viewpager 中获取当前可见的片段,然后执行一些操作,但是我尝试了很多方法但最终没有成功,如果有的话可以显示我有办法做,我非常感谢,提前谢谢你。

  • 我尝试使用 currentItem 但没有成功
  
  if(binding.mainViewPager.currentItem == 0){
            sharedViewModel.setQuery(newText?.toLowerCase()!!)
        } else {
            sharedViewModel.setQuery(newText?.toLowerCase()!!)
        }

1 个答案:

答案 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
            }
        }
    }
}
相关问题