我的应用有一项名为MainActivity的活动。
MainActivity加载3个片段,全部添加到后台堆栈。第一个是自动打开的,是ListFragment。如果我单击ListFragment中的项目,则会创建DetailFragment。在DetailF内部,我可以单击编辑按钮并打开EditFragment。所以后台堆是:
在EditF内部,可以更改有关DetailFragment中显示的对象的信息。在EditF的onPause里面我保存了chanegs
@Override
public void onPause() {
super.onPause();
mTask.setTitle(mTitleEditText.getText().toString());
mTask.setSummary(mSummaryEditText.getText().toString());
}
所以,当我点击后退按钮时,chanegs成功保存(我从日志中看到)。因此,DetailF出现但未显示更改:因为DetailF之前已加载了开始数据。由于在DetailF可见时不会调用onresume,因此无法告诉片段更新数据。
如果我再次点击后退按钮,我会返回ListF并且不会显示更新的数据。
这就是我创建fragemnts的方式:
MainActivity.java中的
private void launchListFragment(){
getSupportFragmentManager().popBackStack ("detail", FragmentManager.POP_BACK_STACK_INCLUSIVE);
Fragment newDetail = ListFragment.newInstance();
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, newDetail, "LIST_F_TAG")
.commit();
}
ListFragment中的:
Task taskToSend = mViewAdapter.getList().get(adapterPosition);
if(getActivity() != null){
Fragment newDetail = DetailFragment.newInstance(taskToSend);
getActivity().getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, newDetail)
.addToBackStack("detail")
.commit();
}
在DetailFragment中:
private void launchEditFragment(Task task){
if(getActivity() != null){
Fragment newDetail = EditFragment.newInstance(task);
getActivity().getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, newDetail)
.addToBackStack("edit")
.commit();
}
}
我希望一旦我在EditFragment中更新mTask数据,所有其他片段都会显示更新的数据。感谢。