更换时,Android Fragment会重置

时间:2018-06-06 07:48:38

标签: android android-studio android-fragments bottomnavigationview

我目前正在使用片段和底部导航栏开发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;
        }
    }
});

1 个答案:

答案 0 :(得分:0)

我找到了阻止这件事的方法。

我使用AsyncTask来刷新我的片段状态。

我只是将new "yourAsyncTaskName"().execute()放在onCreate()方法的开头,以便在创建或替换片段时刷新片段。

希望这会有所帮助。