![](/img/trans.png)
[英]Android repeatOnLifecycle in fragment inside 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.