Android 如何使用kotlin删除视图寻呼机2中的项目?
我使用view-pager2,当我删除view-pager的第一项时,它不会删除,并且仍然保留,但删除了另一项 例如,这里我想删除view pager的第一项,但无法删除: 我的主要活动:Android 如何使用kotlin删除视图寻呼机2中的项目?,android,kotlin,android-viewpager2,Android,Kotlin,Android Viewpager2,我使用view-pager2,当我删除view-pager的第一项时,它不会删除,并且仍然保留,但删除了另一项 例如,这里我想删除view pager的第一项,但无法删除: 我的主要活动: class MainActivity : AppCompatActivity() { private lateinit var myPagerAdapter: MyPagerAdapter private val mFragmentList: ArrayList<FragmentOne> =
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]
}
}
}
如果我不使用view-pager2,只需添加PagerAdapter.POSITION\u就可以了
你能帮我吗 实际上删除功能工作正常,删除了第0个索引片段,但在调用notfiydataset changed后,第一个片段的第1个值为1,第二个值为2。如果您阅读了其中所述的文档 注意:DiffUtil实用程序类依赖于按ID标识项。如果使用ViewPager2对可变集合进行分页,则还必须覆盖getItemId()和containsItem() 摘自本帖- 由于您使用的是可变的
ArrayList()
,因此还应该覆盖适配器中的getItemId()
方法,因为itemId
需要每个片段都有一个唯一的ID,所以我使用hashCode()
函数解决了这个问题,如下所示
override fun getItemId(position: Int): Long {
return mFragmentList[position].hashCode().toLong()
}
这将删除第一个片段,并使用itemId
希望这能解决您的问题。您也能发布您的片段吗?@Skizo ozᴉʞS addedWhy?我不再向ArrayList添加片段。值以片段形式保存在newInstance方法中,并且不能更改。
override fun getItemId(position: Int): Long {
return mFragmentList[position].hashCode().toLong()
}