Учитывая вкладку 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
из фрагмента по-прежнему равно нулю, поэтому он может вернуть заголовок.