Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用kotlin删除视图寻呼机2中的项目?_Android_Kotlin_Android Viewpager2 - Fatal编程技术网

Android 如何使用kotlin删除视图寻呼机2中的项目?

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> =

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

例如,这里我想删除view pager的第一项,但无法删除:

我的主要活动:

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()
    }