我有一个Framelayout和BottomNavigationView的活动...我有4个片段(A,B,C,D)......事情是当我从A到B后,点击菜单项加载片段B,片段A被破坏......我在所有涉及Fragment生命周期和onDestroyView的回调方法(OnAttach,OnCreate,OnCreateView .....等)上添加了一条日志消息是当我改变片段总是叫......所以,当我回来之前打开的片段,onCreateView被再次打电话..片段被重新创建后bottomnavigationview更改项目点击
这里是我的活动类:
public class Home extends AppCompatActivity
{
private BottomNavigationView.OnNavigationItemSelectedListener
mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
{
Fragment fragment = null;
Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
switch (item.getItemId())
{
case R.id.navigation_a:
if (!(currentFragment instanceof FragmentA))
fragment = FragmentA.newInstance();
break;
case R.id.navigation_b:
if (!(currentFragment instanceof FragmentB))
fragment = FragmentB.newInstance();
break;
case R.id.navigation_c:
if (!(currentFragment instanceof FragmentC))
fragment = FragmentC.newInstance();
break;
case R.id.navigation_d:
if (!(currentFragment instanceof FragmentD))
fragment = FragmentD.newInstance();
break;
}
if (fragment != null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
return true;
}
return false;
}
};
//TODO Handle life-cycle methods when switching between fragments
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
.add(R.id.fragment_container, FragementA.newInstance())
.commit();
fm.popBackStack();
BottomNavigationView navigation = findViewById(R.id.navigation); navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
moveTaskToBack(true);
return true;
}
return false;
}
}
我想知道我在这里实际上错过了什么....在此先感谢
@Claude ...你有没有想过它? – GvSharma
@GvSharma ....我真的很抱歉我迟到的队友!! ...其实我用了一个viewpager里面..我没有时间来测试下面提出的想法,因为我在匆忙中..但我确实认为将这个片段添加到后台绝对可以解决这个问题.... –