Как обновить sh данных во фрагменте в ViewPager2 с интерфейсом - PullRequest
1 голос
/ 21 января 2020

Я пытаюсь обновить sh данные в моем фрагменте каждый раз, когда пользователь нажимает на них в Навигации по нижнему меню. Я уже написал интерфейс, который вызывается каждый раз, когда фрагмент выбирается пользователем. Проблема в том, что метод внутри моего фрагмента не имеет доступа к представлению фрагмента (я полагаю):

MainMenu

    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)

            }
        }

    })

Интерфейс "Готов":

interface ReadyInterface {
    fun ready(activity: FragmentActivity?)
}

и ListFragment:

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

Этот код здесь дает сбой с "kotlin .KotlinNullPointerException" on line " testText.text = .... "

Так что я полагаю, что готовый забавный человек не имеет доступа к просмотру моего фрагмента из-за жизненного цикла фрагментов, я прав? Как я мог это исправить?

1 Ответ

0 голосов
/ 22 января 2020

Здесь нет необходимости реализовывать интерфейс. Вы можете напрямую сделать ready() функцией-членом ListFragment и вызывать ее из onPageSelected(position: Int) в MainMenuActivity. В настоящее время интерфейсный метод вызывается до onCreateView(), вызывая исключение нулевого указателя, поскольку представление еще не инициализировано.

...