如何确定片段何时对用户可见

时间:2016-10-15 16:31:49

标签: android android-fragments android-lifecycle

我的应用有一项名为MainActivity的活动。

MainActivity加载3个片段,全部添加到后台堆栈。第一个是自动打开的,是ListFragment。如果我单击ListFragment中的项目,则会创建DetailFragment。在DetailF内部,我可以单击编辑按钮并打开EditFragment。所以后台堆是:

  • ListFragment
  • DetailFragment
  • 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数据,所有其他片段都会显示更新的数据。感谢。

0 个答案:

没有答案