簡體   English   中英

如何更改FragmentStatePagerAdapter的getItem中的片段

[英]How to change fragment inside getItem of FragmentStatePagerAdapter

我有這段代碼,我想根據某些布爾值更改FragmentStatePageAdapter的第一個片段(在viewpager內部)。

inner class MainFragmentAdapter(fragmentManager: FragmentManager) :
        FragmentStatePagerAdapter(fragmentManager) {

    override fun getCount(): Int {
        return MainView.Fragments.values().size
    }

    override fun getItem(position: Int): Fragment? {
        return when (position) {
            0 -> {
                if (booleanOne && !booleanTwo) {
                    FragmentOne.newInstance()
                } else if (booleanTwo && !booleanOne) {
                    FragmentTwo.newInstance()
                } else {
                    FragmentThree.newInstance()
                }
            }
            else -> null
        }
    }
}

到目前為止,我發現的唯一解決方案是,當我個人知道其中一個布爾值已更改時,我只是做了類似的事情:

   _fragmentAdapter = MainFragmentAdapter(getLifecycleFragmentManager())

   fragmentViewPager.adapter = _fragmentAdapter

因此,我只是再次設置了適配器,但是這樣做似乎不可行。 我不能強迫它再次計算getItem嗎?

在您的類中進行這些更改, notifyDataSetChanged()然后重寫getItemPosition() ,它將在每次通知時調用,然后只返回各自的常量POSITION_NONE如果您想查看新的更改),否則返回POSITION_UNCHANGED

    inner class MainFragmentAdapter(fragmentManager: FragmentManager) :
        FragmentStatePagerAdapter(fragmentManager) {

    override fun getCount(): Int {
        return MainView.Fragments.values().size
    }

    override fun getItem(position: Int): Fragment? {
        return when (position) {
            0 -> {
                if (booleanOne && !booleanTwo) {
                    FragmentOne.newInstance()
                } else if (booleanTwo && !booleanOne) {
                    FragmentTwo.newInstance()
                } else {
                    FragmentThree.newInstance()
                }
               notifyDataSetChanged();
            }
            else -> null
        }
    }

    override fun getItemPosition(@NonNull `object`: Any): Int {
            // this method will be called for every fragment in the ViewPager
            return if (`object` is FragmentOne) {
                POSITION_UNCHANGED // don't force a reload
            } else {
                // POSITION_NONE means something like: this fragment is no longer valid
                // triggering the ViewPager to re-build the instance of this fragment.
                POSITION_NONE
            }
        }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM