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 带有两个选项卡的ViewPager在滑动和单击时会导致IndexOutOfBoundsException_Android_Kotlin_Android Recyclerview_Android Viewpager_Android Architecture Navigation - Fatal编程技术网

Android 带有两个选项卡的ViewPager在滑动和单击时会导致IndexOutOfBoundsException

Android 带有两个选项卡的ViewPager在滑动和单击时会导致IndexOutOfBoundsException,android,kotlin,android-recyclerview,android-viewpager,android-architecture-navigation,Android,Kotlin,Android Recyclerview,Android Viewpager,Android Architecture Navigation,我有两个选项卡,其中添加了两个不同的数据列表,两个选项卡共享一个recyclerview,因此在我的viewpager适配器上,我只创建一个新实例来填充数据 从视图 如果您来这里时我没有理解错,那么您的viewPagerAdapter已经创建,并且您在adapter中将列表定义为非空(MutableList) 例如,在创建适配器时和设置数据之前,此块尝试获取位置1。它将返回IndexOutOfBoundsException 可能您必须尝试在viewPagerAdapter的构造函数中移动此列表。

我有两个选项卡,其中添加了两个不同的数据列表,两个选项卡共享一个recyclerview,因此在我的viewpager适配器上,我只创建一个新实例来填充数据

从视图 如果您来这里时我没有理解错,那么您的viewPagerAdapter已经创建,并且您在adapter中将列表定义为非空(MutableList

例如,在创建适配器时和设置数据之前,此块尝试获取位置1。它将返回IndexOutOfBoundsException


可能您必须尝试在viewPagerAdapter的构造函数中移动此列表。

请提供完整的堆栈跟踪。@MikeM。Stacktrace:进一步考虑,实际上,我们可能不需要
StoreAdapter
,因此如果您的问题空间不足,请暂时发布
FragmentProducts
val allProducts = completeProductList
     val productsList = mutableListOf<Products>()
                        val drinksList = mutableListOf<Products>()
                        for (product in allProducts) {
                            if (product.isDrink) {
                                drinksList.add(product)
                            } else {
                                productsList.add(product)
                            }
                        }

                        viewPagerAdapter.productsList = productsList
                        viewPagerAdapter.drinksList = drinksList
                        viewPagerAdapter.notifyDataSetChanged()
class PagerAdapter(fragmentActivity: FragmentActivity) :
    FragmentStateAdapter(fragmentActivity) {

    var productsList: MutableList<Product> = arrayListOf()
    var drinksList: MutableList<Product> = arrayListOf()

    override fun getItemCount(): Int {
        return 2
    }

    override fun createFragment(position: Int): Fragment {
        return when(position){
            0 -> {
                FragmentProducts.newInstance(productsList)
            }
            else -> {
                FragmentProducts.newInstance(drinksList)
            }
        }
    }
}
companion object {
        fun newInstance(product: MutableList<Product>) = FragmentProducts().apply {
            arguments = Bundle().apply {
                putParcelableArrayList(ARG_PROD,ArrayList<Parcelable>(product))
            }
        }
    }

    // I get the product list from the adapter, either drinks or normal products
    override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            arguments?.let {
                productsList = it.getParcelableArrayList<Product>(ARG_PROD)
            }
        }

    // Then I just set it up to the shared recyclerview
     override fun onActivityCreated(savedInstanceState: Bundle?) {
            super.onActivityCreated(savedInstanceState)
            adapter.productsList = productsList!!
            adapter.notifyDataSetChanged()
        }
 fun getItem(position: Int):Product{
        return productList[position]
    }
viewPagerAdapter.productsList = productsList
viewPagerAdapter.drinksList = drinksList
viewPagerAdapter.notifyDataSetChanged()
fun getItem(position: Int):Product{
    return productList[position]
}