簡體   English   中英

Android 刪除 ViewPager2 上的片段

[英]Android delete fragment on ViewPager2

我在這里以帶有 Fragments 的 ViewPager2 為例。 當我刪除第一個 position 時,片段仍在顯示。 您對這種情況有什么建議嗎?

class PagerAdapter(
    private var activity: FragmentActivity,
    private var itemCount: Int,
    private val conversationId: Long,
    private val currentMediaOffset: Int,
    private val callBack: PhotoViewerActivity.OnPageListener
): FragmentStateAdapter(activity) {
val list = mutableListOf<SwipePhotoViewerFragment>()
override fun createFragment(position: Int): Fragment {
    if (position < list.size) {
        list[position].setCallback(callBack)
        return list[position]
    }

    val fragment = SwipePhotoViewerFragment.create(
            conversationId,
            position,
            currentMediaOffset
    )
    fragment.setCallback(callBack)
    list.add(fragment)

    return fragment
}

override fun getItemCount(): Int {
    return itemCount
}

fun removeItem(position: Int) {
    val fragmentManager = activity.supportFragmentManager
    fragmentManager.beginTransaction().remove(list[position]).commit()
    list.removeAt(position)
    itemCount--
    notifyItemRangeRemoved(position, 1)
    notifyDataSetChanged()
}
}

當我們調用notifyDataSetChanged()時,android 將調用適配器中的getItemId()方法,檢查項目是否已更新,然后在源代碼中返回 position。 這基本上意味着在列表中,如果你有類似 0-1-2-3-4-5 的東西,如果你刪除 i=2 position,它變成 0-1-2-3-4 但奇怪的是i不會t 更改並且數據不會在適配器中更新。

所以你要做的是覆蓋getItemId()

val listOfData :MutableList<*> = ArrayList()

override fun getItemId(position: Int): Long 
{
    return lisfOfData[position].hashCode().toLong()
}

這將確保每個片段都是唯一的並且在適配器中更新。

暫無
暫無

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

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