Android 为什么用BottomNavigation视图显示和隐藏片段不起作用?
我正在使用Android 为什么用BottomNavigation视图显示和隐藏片段不起作用?,android,android-fragments,bottomnavigationview,fragmentmanager,Android,Android Fragments,Bottomnavigationview,Fragmentmanager,我正在使用BottomNavigationView和其中的5个片段。我希望每个片段只创建一次,而不是每次用户在它们之间切换时都重新创建 因此,我正在创建所有片段,并尝试在片段容器中显示和隐藏它们 这是我的代码: (我用这个写这段代码) 我的问题是,MainListFragment将在打开应用程序时显示,但当我尝试转到其他片段时,什么都不会发生! 和MainListFragment将不会更改 我错在哪里 谢谢您的回答。只在主要部分留下一个替换,而不是添加: fm.beginTransaction(
BottomNavigationView
和其中的5个片段。我希望每个片段只创建一次,而不是每次用户在它们之间切换时都重新创建
因此,我正在创建所有片段,并尝试在片段容器中显示和隐藏它们
这是我的代码:
(我用这个写这段代码)
我的问题是,MainListFragment
将在打开应用程序时显示,但当我尝试转到其他片段时,什么都不会发生!
和MainListFragment
将不会更改
我错在哪里
谢谢您的回答。只在主要部分留下一个
替换
,而不是添加:
fm.beginTransaction().replace(R.id.fragment_容器,magFragment,“5”).commit()代码>
并将其从onCreate
fm.beginTransaction().add(R.id.fragment_container, ideaFragment, "4").commit();
fm.beginTransaction().add(R.id.fragment_container, videoFragment, "3").commit();
fm.beginTransaction().add(R.id.fragment_container, articleFragment, "2").commit();
fm.beginTransaction().add(R.id.fragment_container, mainListFragment, "1").commit();
然后,在ononNavigationItemSelected
中执行以下操作:
switch (menuItem.getItemId()) {
case R.id.nav_home:
fm.beginTransaction().replace(R.id.fragment_container, magFragment, "5").commit();
break;
case R.id.nav_article:
fm.beginTransaction().replace(R.id.fragment_container, articleFragment, "2").commit();
break;
case R.id.nav_video:
fm.beginTransaction().replaceR.id.fragment_container, videoFragment, "3").commit();
break;
case R.id.nav_idea:
fm.beginTransaction().replace(R.id.fragment_container, ideaFragment, "4").commit();
break;
case R.id.nav_mag:
fm.beginTransaction().replace(R.id.fragment_container, mainListFragment, "1").commit();
break;
}
实例化onCreate
中的每个片段是正确的方法,这样,您就不会每次切换时都创建另一个片段。如果您想实现这种行为,您必须使用以下方法:
fm.beginTransaction().replace(R.id.fragment_container, new MagPresenter((MagContract.View) magFragment, appRepository), "1").commit();
谢谢,但这不是我想要的。正如您所说,当用户在片段之间切换时,该片段将重新创建。但我只想创建每个片段一次,然后再继续创建。不,这样就不会重新创建片段。只有在创建活动时才创建片段,然后,相同的片段用于在页面之间切换,但当我从片段1切换到片段2时,片段1将执行ondestory
方法,因此,该片段中所有接收到的数据也将被销毁。我在代码中使用了addToBackStack
,并将每个片段添加到堆栈中。如下所示:fm.beginTransaction().replace(R.id.fragment_容器,mainListFragment,“1”).addToBackStack(“1”).commit()
Now on destroy将不会调用,但我的数据列表将以任何方式进行销毁。当您使用back stack时,读取onDestroy时不应调用,它应该在之前停止,在onDestroyView中,您可以测试它吗?我面临同样的问题,片段不会隐藏和显示另一个片段。你是怎么解决的?请给我点光。
fm.beginTransaction().replace(R.id.fragment_container, new MagPresenter((MagContract.View) magFragment, appRepository), "1").commit();