簡體   English   中英

FragmentPagerAdapter 在數據更改后顯示錯誤的片段

[英]FragmentPagerAdapter shows wrong fragment after data change

我有一個簡單的FragmentPagerAdaper ,並且覆蓋了getItemgetCount方法。

一切正常,直到我更改數據。

即使在調用notifyDataSetChangedViewPager也會顯示舊片段,即使我沒有在getItem返回它。

科特林代碼:

private inner class Adapter(fragmentManager: FragmentManager) : FragmentPagerAdapter(fragmentManager) {
    override fun getItem(position: Int): Fragment {
        when (getType(position)) {
            Constants.CHAT_TYPE_PARTNER -> {
                return TaskChatFragment.newInstance(...)
            }
            Constants.CHAT_TYPE_SUPPORT -> {
                return TaskChatFragment.newInstance(...)
            }
        }
        throw IllegalArgumentException("invalid position " + position)
    }

    fun getPosition(type: Int) =
            if (type == Constants.CHAT_TYPE_SUPPORT && shouldShowPartnerChat()) 1 else 0

    override fun getCount(): Int {
        var count = 0
        if (shouldShowPartnerChat()) count++
        if (shouldShowSupportChat()) count++
        return count
    }
}

除了 2 個方法之外,我還需要覆蓋getItemId ,因為我正在更改getItem返回的片段的位置。 如文檔中所述:

long getItemId (int position)

返回給定位置的項目的唯一標識符。

默認實現返回給定的位置。 如果項目的位置可以改變,子類應該覆蓋這個方法。

    /**
     * We need to override this as positions of items may change.
     *
     * Like when the partner conv is hidden.
     */
    override fun getItemId(position: Int) = getType(position).toLong()

我想通了這一點用的斷點調試后,並意識到getItem沒有被調用后調用notifyDataSetChanged

暫無
暫無

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

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