Android Kotlin ViewPager空点异常

Android Kotlin ViewPager空点异常,android,android-layout,android-fragments,kotlin,android-viewpager,Android,Android Layout,Android Fragments,Kotlin,Android Viewpager,我试图在一个已经存在的片段中获取一个viewpager。 在另一个项目中,viewpager在activity_main.xml中时,我没有遇到任何问题 我尝试的其中一件事是: ViewPagerAdapter.kt class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { override fun ge

我试图在一个已经存在的片段中获取一个
viewpager
。 在另一个项目中,
viewpager
在activity_main.xml中时,我没有遇到任何问题

我尝试的其中一件事是:

ViewPagerAdapter.kt

class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 -> KapperKeuze1Fragment()
            1 -> KapperKeuze2Fragment()
            else -> KapperKeuze3Fragment()
        }
    }

    override fun getCount(): Int {
    return 3
    }
}
class MainActivity : AppCompatActivity() {

lateinit var homeFragment: HomeFragment
lateinit var afspraakFragment: AfspraakFragment
lateinit var overFragment: OverFragment

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

    val bottomNavigation : BottomNavigationView = findViewById(R.id.bot_nav)

    homeFragment = HomeFragment()
    supportFragmentManager
        .beginTransaction()
        .replace(R.id.frame_layout, homeFragment)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .commit()

    bottomNavigation.setOnNavigationItemSelectedListener { item ->

        when (item.itemId) {
            R.id.home -> {
                homeFragment = HomeFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, homeFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
            R.id.afspraak -> {
                afspraakFragment = AfspraakFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, afspraakFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
            R.id.over -> {
                overFragment = OverFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, overFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
        }
        true
    }
    val adapter = ViewPagerAdapter(supportFragmentManager)
    val pager = findViewById<View>(R.id.viewPager) as ViewPager
    pager.adapter = adapter
    }
}
MainActivity.kt

class ViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 -> KapperKeuze1Fragment()
            1 -> KapperKeuze2Fragment()
            else -> KapperKeuze3Fragment()
        }
    }

    override fun getCount(): Int {
    return 3
    }
}
class MainActivity : AppCompatActivity() {

lateinit var homeFragment: HomeFragment
lateinit var afspraakFragment: AfspraakFragment
lateinit var overFragment: OverFragment

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

    val bottomNavigation : BottomNavigationView = findViewById(R.id.bot_nav)

    homeFragment = HomeFragment()
    supportFragmentManager
        .beginTransaction()
        .replace(R.id.frame_layout, homeFragment)
        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
        .commit()

    bottomNavigation.setOnNavigationItemSelectedListener { item ->

        when (item.itemId) {
            R.id.home -> {
                homeFragment = HomeFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, homeFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
            R.id.afspraak -> {
                afspraakFragment = AfspraakFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, afspraakFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
            R.id.over -> {
                overFragment = OverFragment()
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.frame_layout, overFragment)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .commit()
            }
        }
        true
    }
    val adapter = ViewPagerAdapter(supportFragmentManager)
    val pager = findViewById<View>(R.id.viewPager) as ViewPager
    pager.adapter = adapter
    }
}
class MainActivity:AppCompatActivity(){
lateinit var homeFragment:homeFragment
lateinit var afspraakFragment:afspraakFragment
lateinit变量overFragment:overFragment
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val bottomNavigation:BottomNavigationView=findViewById(R.id.bot_nav)
homeFragment=homeFragment()
支持碎片管理器
.beginTransaction()
.替换(R.id.frame_布局,homeFragment)
.setTransition(FragmentTransaction.Transition\u FRAGMENT\u OPEN)
.commit()
bottomNavigation.setOnNavigationItemSelectedListener{item->
时间(item.itemId){
R.id.home->{
homeFragment=homeFragment()
支持碎片管理器
.beginTransaction()
.替换(R.id.frame_布局,homeFragment)
.setTransition(FragmentTransaction.Transition\u FRAGMENT\u OPEN)
.commit()
}
R.id.afspraak->{
afspraakFragment=afspraakFragment()
支持碎片管理器
.beginTransaction()
.更换(R.id.frame_布局,afspraakFragment)
.setTransition(FragmentTransaction.Transition\u FRAGMENT\u OPEN)
.commit()
}
R.id.over->{
overFragment=overFragment()
支持碎片管理器
.beginTransaction()
.更换(R.id.frame_布局,过碎片)
.setTransition(FragmentTransaction.Transition\u FRAGMENT\u OPEN)
.commit()
}
}
真的
}
val适配器=ViewPagerAdapter(supportFragmentManager)
val pager=findViewById(R.id.viewPager)作为viewPager
pager.adapter=适配器
}
}
fragment_afspraak.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

    <androidx.viewpager.widget.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</LinearLayout>

错误发生在MainActivity.kt的以下位置:
val pager=findViewById(R.id.viewPager)as viewPager

并给出:

原因:kotlin.TypeCastException:null不能强制转换为非null类型androidx.viewpager.widget.viewpager


使用childFragmentManager而不是supportFragmentManager

因为它返回一个私有的碎片管理器,用于在此碎片中放置和管理碎片。(您可以查看位于AFSPRAK碎片中的寻呼机碎片)

因此,在AfspraakFragment中设置您的ViewPager,如下所示:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val adapter = ViewPagerAdapter(childFragmentManager)
    val pager = view.findViewById(R.id.viewPager) as ViewPager
    pager.adapter = adapter
}

R.id.viewPager
不在您尚未设置的
R.layout.activity\u main
中posted@tyczj我希望viewpager位于一个已经存在的片段中,当我将viewpager放在main中时,这不会发生。那么我怎样才能把它放在另一个布局中呢?为什么不在你的片段中实现你的viewPager???!!您可以简单地在您的组件的onCreateView或onViewCreated方法中的片段中实现ViewPagerfragment@AlirezaBideli这正是我想要的,但我已经在谷歌上搜索了好几个小时了,我是kotlin和android开发的新手。那怎么办?