You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ViewPager时Fragment内RecyclerView出现空指针异常求助

ViewPager中Fragment绑定RecyclerView触发空指针异常

错误详情

空指针异常触发在尝试为RecyclerView设置布局管理器的代码行,核心原因是recyclerView对象为null。

Fragment布局代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Activity代码

package com.example.mymu

import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager.widget.ViewPager

import com.example.my.MusicInfo
import com.example.my.PageAdapter
import kotlinx.android.synthetic.main.activity_main2.*

class MainActivity2 : AppCompatActivity() {

    companion object {
        lateinit var mylist: MutableList<MusicInfo>
    }

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

        val song1= MusicInfo("Darshan Raval","Asal Main",R.drawable.asalmain,"3:10")
        val song2=MusicInfo("Jass Manak","Prada", R.drawable.manak,"2:50")
        val song3=MusicInfo("Darshan Raval","Asal Main",R.drawable.asalmain,"3:10")
        val song4=MusicInfo("Jass Manak","Prada",R.drawable.manak,"2:50")
        val song5=MusicInfo("Darshan Raval","Asal Main",R.drawable.asalmain,"3:10")
        val song6=MusicInfo("Jass Manak","Prada",R.drawable.manak,"2:50")
        val song7=MusicInfo("Darshan Raval","Asal Main",R.drawable.asalmain,"3:10")
        val song8=MusicInfo("Jass Manak","Prada",R.drawable.manak,"2:50")
        val song9=MusicInfo("Darshan Raval","Asal Main",R.drawable.asalmain,"3:10")
        val song10=MusicInfo("Jass Manak","Prada",R.drawable.manak,"2:50")
        val song11=MusicInfo("Darshan Raval","Asal Main",R.drawable.asalmain,"3:10")
        val song12=MusicInfo("Jass Manak","Prada",R.drawable.manak,"2:50")
        val song13=MusicInfo("Darshan Raval","Asal Main",R.drawable.asalmain,"3:10")
        val song14=MusicInfo("Jass Manak","Prada",R.drawable.manak,"2:50")
        val song15=MusicInfo("Darshan Raval","Asal Main",R.drawable.asalmain,"3:10")
        val song16=MusicInfo("Jass Manak","Prada",R.drawable.manak,"2:50")
        val song17=MusicInfo("Darshan Raval","Asal Main",R.drawable.asalmain,"3:10")
        val song18=MusicInfo("Jass Manak","Prada",R.drawable.manak,"2:50")
        val song19=MusicInfo("Darshan Raval","Asal Main",R.drawable.asalmain,"3:10")
        val song20=MusicInfo("Jass Manak","Prada",R.drawable.manak,"2:50")
        mylist= mutableListOf()
        mylist.add(song1)
        mylist.add(song2)
        mylist.add(song3)
        mylist.add(song4)
        mylist.add(song5)
        mylist.add(song6)
        mylist.add(song7)
        mylist.add(song8)
        mylist.add(song9)
        mylist.add(song10)
        mylist.add(song11)
        mylist.add(song12)
        mylist.add(song13)
        mylist.add(song14)
        mylist.add(song15)
        mylist.add(song16)
        mylist.add(song17)
        mylist.add(song18)
        mylist.add(song19)
        mylist.add(song20)
    
        // 报错代码段
        val recyclerView=findViewById(R.id.rv)
        recyclerView.layoutManager = LinearLayoutManager(this@MainActivity2,LinearLayoutManager.VERTICAL,false)
        recyclerView.adapter = MyAdapter(mylist)
        view_pager.adapter=PageAdapter(supportFragmentManager)
        tab_layout.setupWithViewPager(view_pager)
        tab_layout.setTabTextColors(Color.parseColor("#7DC1C6"),resources.getColor(R.color.teal_700))
        tab_layout.setBackgroundResource(R.drawable.drawable4)
    }
}

问题原因

你在Activity中调用findViewById(R.id.rv),但这个RecyclerView是Fragment布局文件中的控件,Activity的布局里并没有这个ID,所以findViewById返回null,后续调用layoutManager方法直接触发空指针异常。

解决方案

将RecyclerView的初始化逻辑移到对应的Fragment中,在Fragment的onViewCreated方法中完成绑定:

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

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val recyclerView = view.findViewById<RecyclerView>(R.id.rv)
        recyclerView.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
        recyclerView.adapter = MyAdapter(MainActivity2.mylist)
    }
}

同时,Activity中只保留ViewPager和TabLayout的初始化代码:

// Activity中修改后的代码段
view_pager.adapter=PageAdapter(supportFragmentManager)
tab_layout.setupWithViewPager(view_pager)
tab_layout.setTabTextColors(Color.parseColor("#7DC1C6"),resources.getColor(R.color.teal_700))
tab_layout.setBackgroundResource(R.drawable.drawable4)

内容的提问来源于stack exchange,提问作者jass manak FaN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:15:52