检测片段何时再次位于顶部(具有焦点)

时间:2015-09-30 14:34:13

标签: android android-fragments android-activity

在我的应用中,我的活动有一个带有片段的容器。当单击该片段中的按钮时,我将一个新片段添加到容器中,并将前一个片段添加到backstack。

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.primary_fragment_container, homeFragmentHandler);
    fragmentTransaction.addToBackStack(folderId.toString());
    fragmentTransaction.commit();

结果是按回关闭顶部片段并将我返回到前一个片段,这正是我想要的。但是,片段上有某些元素应该在此时刷新。当用户单击并返回到上一个片段时,如何刷新该片段中的数据?是否有针对此场景的onResume()等方法?

2 个答案:

答案 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,因此语句中的代码将不会被执行。