Как избежать перезагрузки данных фрагмента при нажатии назад от нижней навигации - PullRequest
0 голосов
/ 31 августа 2018

Может ли кто-нибудь помочь мне решить проблему, когда fragment перезагружает данные каждую вкладку назад.

Это моя основная деятельность

class MainActivity : AppCompatActivity() {


    private fun addBottomView(){
        bottomNav.setOnNavigationItemSelectedListener(object: BottomNavigationView.OnNavigationItemSelectedListener{

            override fun onNavigationItemSelected(p0: MenuItem): Boolean {
                var selectedItem: Fragment? = null
                when(p0.itemId){
                    R.id.words ->
                        selectedItem = FragmentA.newInstance()
                    R.id.writing ->
                        selectedItem = FragmentB.newInstance()
                    R.id.speaking ->
                        selectedItem = FragmentC.newInstance()
                    R.id.reading ->
                        selectedItem = FragmentD.newInstance()
                }
                var ft: FragmentTransaction = supportFragmentManager.beginTransaction()
                ft.replace(R.id.frame_layout, selectedItem!!)
                ft.commit()
                return true
            }
        })
        var ft: FragmentTransaction = supportFragmentManager.beginTransaction()
        ft.replace(R.id.frame_layout, WordsFragment.newInstance())
        ft.commit()

    }
}

Я нашел в Интернете и на YouTube видео, но никто не ответил на эти вопросы точно, они рекомендовали использовать добавить , скрыть вместо заменить , но не так уверен, как это сделать. если возможно, можете ли вы, ребята, объяснить это так же ясно, как вы можете:)

Это мой ViewPageAdapter

class ViewPagerAdapter: FragmentPagerAdapter {

    private val mFragmentList: MutableList<Fragment> = mutableListOf()
    private val mFragmentTitleList : MutableList<String> = mutableListOf()

    constructor(manager: FragmentManager) : super(manager){

    }

    fun addFragment(fragment: Fragment, title: String){
        mFragmentList.add(fragment)
        mFragmentTitleList.add(title)
    }

    override fun getItem(position: Int): Fragment {
        return mFragmentList.get(position)
    }

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

    override fun getPageTitle(position: Int): CharSequence? {
        return mFragmentTitleList.get(position)
    }
}

Спасибо

1 Ответ

0 голосов
/ 02 сентября 2018

Вы можете решить эту проблему, определив фрагменты как синглтон. например:

class FragmentA: Fragment {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return super.onCreateView(inflater, container, savedInstanceState)
    }

    companion object {

        private var instance: FragmentA? = null

        fun newInstance(): FragmentA {
            if (instance == null) instance = FragmentA()
            return instance!!
        }
    }
}
...