在我的应用中,我的活动有一个带有片段的容器。当单击该片段中的按钮时,我将一个新片段添加到容器中,并将前一个片段添加到backstack。
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.primary_fragment_container, homeFragmentHandler);
fragmentTransaction.addToBackStack(folderId.toString());
fragmentTransaction.commit();
结果是按回关闭顶部片段并将我返回到前一个片段,这正是我想要的。但是,片段上有某些元素应该在此时刷新。当用户单击并返回到上一个片段时,如何刷新该片段中的数据?是否有针对此场景的onResume()等方法?
答案 0 :(得分:1)
您必须正确添加片段到backstack:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
MyFragment fragment = new MyFragment ();
transaction.replace(R.id.primary_fragment_container, fragment).addToBackStack(null).commit();
答案 1 :(得分:1)
Fragment homeFragmentHandler= new Fragment();
Bundle bundle = new Bundle();
//replace this line below wth something convinient
bundle.putInt("key", value);
fragment.setArguments(bundle);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.primary_fragment_container, homeFragmentHandler);
fragmentTransaction.addToBackStack(folderId.toString());
fragmentTransaction.commit();
这将发送有关哪个片段/活动导致前一个片段加载的数据。现在在onCreate中添加此代码以检查包中的数据
//In the onCreate of the original fragment
Bundle bundle = this.getArguments();
if(bundle.getInt(key, defaultValue)!=null{
int myInt = bundle.getInt(key, defaultValue);
// Load the data that needs to be refreshed when original fragment is loaded from the second one
}
不需要其他声明。如果片段是由任何其他活动/片段组成的,那么bundle.getInt将返回null,因此语句中的代码将不会被执行。