从片段2返回到片段1,但标题仍然来自片段2

时间:2017-11-12 08:27:26

标签: android android-fragments onbackpressed

每个人都有问题,无法解决问题;

问题是我的mainActivity包含工具栏是它的xml 在onCreate()中,我使用此代码添加片段1

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

        try {
            // put the fragment to the Main Activity
            mainFragment = (MainFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_container);
            if (mainFragment == null) {
                mainFragment = MainFragment.newInstance();
                getSupportFragmentManager()
                        .beginTransaction()
                        .add(R.id.fragment_container, mainFragment)
                        .commit();
            }
        } catch (Exception e) {
            goToMainFragment();
            //   Log.v("goToMainFragment()", "goToMainFragment()");
        }
    }

然后我有按钮例如或点击它时从抽屉转到使用此代码的片段2

public void editTimeSheet() {
    AddTimeSheetFragment timeSheetFragment = new AddTimeSheetFragment();
    Bundle bundle = new Bundle();
    bundle.putInt("action", 2);
    bundle.putSerializable("timeSheet", timeSheet);
    timeSheetFragment.setArguments(bundle);

   getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, timeSheetFragment).addToBackStack("stack").commit();

}

当然在每个片段中我使用更改工具栏标题 getActivity()。setTitle("某个标题");

但问题是当我回来使用onBackPressed标题没有改变,仍然是从片段2设置的标题,我知道为什么因为我改变了活动的工具栏标题,当我回到片段1 onCreateView没有调用所以标题没有改变,我尝试调用片段生命周期方法,所以任何方法已经在后退按钮中调用我将更改工具栏标题,但似乎没有方法回来时调用

对不起,如果问题不够清楚,但我写得最好并描述问题,谢谢你的时间

1 个答案:

答案 0 :(得分:0)

好的没有人回答我,经过长时间的研究后我发现了这个并且它的工作

@Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if (hidden) {
//            Toast.makeText(getContext(), "hide fragment", Toast.LENGTH_SHORT).show();
        } else {
//            Toast.makeText(getContext(), "show fragment", Toast.LENGTH_SHORT).show();
            setToolbarTitle();
        }
    }

返回片段1后,使用hidden value = false

调用此方法