gpt4 book ai didi

android - 如何使用 kotlin 删除 view-pager 2 中的项目?

转载 作者:行者123 更新时间:2023-12-02 12:44:50 35 4
gpt4 key购买 nike

我使用 view-pager2 并且当我删除 view-pager 的第一项时,它不会删除并且仍然保留但删除了另一项。

例如,这里我想删除 view pager 的第一项,但它没有被删除:

screen record

我的主要 Activity :

class MainActivity : AppCompatActivity() {

private lateinit var myPagerAdapter: MyPagerAdapter
private val mFragmentList: ArrayList<FragmentOne> = ArrayList()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

if (mFragmentList.isEmpty()) {
mFragmentList.add(FragmentOne.newInstance(1))
mFragmentList.add(FragmentOne.newInstance(2))
mFragmentList.add(FragmentOne.newInstance(3))
}

myPagerAdapter = MyPagerAdapter(supportFragmentManager, lifecycle)
view_pager.adapter = myPagerAdapter

btn_show.setOnClickListener {
val dialog = Dialog(this)
dialog.setContentView(R.layout.fragment_dialog)
dialog.btn_remove.setOnClickListener {
//go to next item
view_pager.currentItem = 1
//remove first item
mFragmentList.removeAt(0)
//reload adapter
myPagerAdapter.notifyDataSetChanged()
}
dialog.show()
}

}

private inner class MyPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragmentManager, lifecycle) {

override fun getItemCount(): Int {
return mFragmentList.size
}

override fun createFragment(position: Int): Fragment {
return mFragmentList[position]
}

}
}

fragment 一:

class FragmentOne : Fragment() {

companion object {
fun newInstance(position: Int): FragmentOne {
val fragment = FragmentOne()
val bundle = Bundle()
bundle.putInt("id", position)
fragment.arguments = bundle
return fragment
}
}

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_one, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val id = arguments?.getInt("id")
tv?.text = id.toString()
}

}

如果我不使用 view-pager2,添加 PagerAdapter.POSITION_NONE 就够了,比如 this answer .

你能帮帮我吗?!

最佳答案

如果你阅读它说的文档

Note: The DiffUtil utility class relies on identifying items by ID. If you are using ViewPager2 to page through a mutable collection, you must also override getItemId() and containsItem().

取自这篇文章 - Migrate to ViewPager2

由于您使用的是可变的 ArrayList(),因此您还应该覆盖适配器中的 getItemId() 方法,对于 itemId 您每个 fragment 都需要一个唯一的 ID,我使用 hashCode() 函数解决了这个问题

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

这应该删除第一个 fragment 并使用 itemId 从列表中获取正确的 fragment 希望这能解决您的问题。

关于android - 如何使用 kotlin 删除 view-pager 2 中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63049199/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com