如何通过接口刷新ViewPager2中fragment中的数据

Los*_*yos 5 android interface android-fragments android-viewpager kotlin

每次用户在底部菜单导航中单击片段时,我都会尝试刷新片段中的数据。我已经编写了一个接口,每次用户选择片段时都会调用该接口。问题是片段内的方法无法访问片段的视图(我猜):

主菜单

    viewPager = findViewById(R.id.frame_container)
    viewPager!!.offscreenPageLimit = 5
    viewPager!!.orientation = ViewPager2.ORIENTATION_HORIZONTAL
    viewPager!!.adapter = pageAdapter
    viewPager!!.currentItem = 0
    viewPager!!.isUserInputEnabled = false
    viewPager!!.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            if(position == 2) {
                val mFragment = ListFragment()
                mFragment.ready(this@MainMenu)

            }
        }

    })
Run Code Online (Sandbox Code Playgroud)

界面“就绪”:

interface ReadyInterface {
    fun ready(activity: FragmentActivity?)
}
Run Code Online (Sandbox Code Playgroud)

和列表片段:

class ListFragment: Fragment(), ReadyInterface {

    var mView : View? = null

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        val view = inflater.inflate(R.layout.fragment_list, container, false)
        this.mView = view

        val user = FirebaseAuth.getInstance().currentUser
        return if (user != null) {

        view
        } else {
        val unregisteredView = inflater.inflate(R.layout.fragment_unregistred, container, false)
        val registerNow = unregisteredView.findViewById<TextView>(R.id.textview_registernow)
        unregisteredView
    }


override fun ready(activity: FragmentActivity?) {

    testText = mView!!.findViewById(R.id.test_text)
    testText.text = "Test Text here"
    Toast.makeText(activity!!.applicationContext,"Test",Toast.LENGTH_LONG).show()
}
Run Code Online (Sandbox Code Playgroud)

此代码在“testText.text = ....”行上崩溃并出现“kotlin.KotlinNullPointerException”

所以我想由于片段的生命周期,有趣的准备人员无法访问我的片段的视图,对吗?我该如何解决这个问题?

小智 0

这里不需要实现接口。您可以直接创建 的ready()成员函数并从in 中ListFragment调用它。目前,由于视图尚未初始化,接口方法在引发空指针异常之前被调用。onPageSelected(position: Int)MainMenuActivityonCreateView()