我目前正在使用片段和底部导航栏开发Android工作室应用程序。 当我点击导航栏的项目时,它会将当前片段替换为另一个片段,该片段对应于此项目所需的片段。
问题是,我的片段中的对象在替换片段后都被重置。
我没有从容器中删除片段,所以我真的不明白为什么在执行此操作后重置所有对象。
这是我的代码,用于向我的FrameLayout添加和替换片段:
private void setFragment(Fragment fragment) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.fade_out);
if (getSupportFragmentManager().findFragmentById(R.id.main_frame) == null) {
fragmentTransaction.add(R.id.main_frame, fragment);
}
else
{
fragmentTransaction.replace(R.id.main_frame, fragment);
}
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
这是底部导航条形码,用于执行上一个功能并更改显示的片段:
homeFragment = new HomeFragment();
programFragment = new ProgramFragment();
bluetoothFragment = new BluetoothFragment();
mMainNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
test = mMainNav.getMenu().getItem(2);
switch (item.getItemId()) {
case R.id.nav_home:
//mMainNav.setItemBackgroundResource(R.color.colorPrimary);
HQ_logo_IV.setVisibility(View.VISIBLE);
setFragment(homeFragment);
return true;
case R.id.nav_program:
//mMainNav.setItemBackgroundResource(R.color.colorAccent);
HQ_logo_IV.setVisibility(View.INVISIBLE);
setFragment(programFragment);
return true;
case R.id.nav_bluetooth:
//mMainNav.setItemBackgroundResource(R.color.colorPrimaryDark);
HQ_logo_IV.setVisibility(View.INVISIBLE);
setFragment(bluetoothFragment);
return true;
default:
return false;
}
}
});
答案 0 :(得分:0)
我找到了阻止这件事的方法。
我使用AsyncTask
来刷新我的片段状态。
我只是将new "yourAsyncTaskName"().execute()
放在onCreate()
方法的开头,以便在创建或替换片段时刷新片段。
希望这会有所帮助。