FragmentPagerAdapter запускает getPageTitle () перед созданием дочернего фрагмента - PullRequest
0 голосов
/ 04 февраля 2019

Учитывая вкладку Activity и фрагмент для каждой вкладки:

Я хочу установить заголовок вкладки.Этот заголовок основан на размещенном фрагменте (свойство)

private fun initializeViewPager(vp: ViewPager) {
    var frags = ArrayList<ArticleFragment>()
    for (art: Article in stocks) {
        frags.add(ArticleFragment.newInstance(art))
    }

    mSectionsPagerAdapter = SectionsPagerAdapter(supportFragmentManager, frags)
    vp.adapter = mSectionsPagerAdapter
    my_tabs.setupWithViewPager(vp)
}

Мой адаптер:

inner class SectionsPagerAdapter(fm: FragmentManager, 
mFragmentListParam: ArrayList<ArticleFragment>) :
    FragmentPagerAdapter(fm) {
    private var mFragmentList = mFragmentListParam

    override fun getItem(position: Int): ArticleFragment {
        return mFragmentList[position]
    }

    override fun getCount(): Int {
        return mFragmentList.size
    }

    override fun getPageTitle(position: Int): CharSequence? {
        return mFragmentList[position].getTitle() // this does not work
        //return position.toString() // this works
    }
}

И мое определение класса фрагмента:

class ArticleFragment : Fragment() {

var article : Article? = null

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    article = arguments?.getSerializable("KEY") as Article

    return inflater.inflate(R.layout.fragment_article, container, false)
}

public fun getTitle():String{
    return article.title // article is null when it is called from adapter
}

companion object {
    @JvmStatic
    fun newInstance(sat: Article) = ArticleFragment().apply {
        arguments = Bundle().apply {
            putSerializable("KEY", sat)
        }
    }
}

}

Проблема заключается в функции override fun getPageTitle на адаптере, которая пытается вызвать getTitle() на фрагменте.Но хотя фрагмент уже создан, свойство article из фрагмента по-прежнему равно нулю, поэтому он может вернуть заголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...