更换片段时再次显示片段时回调

时间:2016-01-19 19:32:46

标签: android android-fragments

我一直在研究这个话题,但到目前为止还没有运气。基本上我正在使用FragmentTransaction.replace将片段(A)替换为另一片段(B)。在这个其他片段(B)中,我在工具栏中有一个“取消”按钮,当按下该按钮时,通过调用getActivity().getSupportFragmentManager().popBackStackImmediate()弹出回到上一个事务(A)。

问题是当我显示片段A和片段B时,我需要更新“活动”工具栏以显示不同的标题。我似乎找不到每当我从A开始在片段A中调用的方法时 - > B - > A告诉我它再次可见。我的想法是在这个回调中设置工具栏标题,我似乎无法找到它。

有人能指出我正确的方向吗?

干杯。

修改

方法我调用用另一个替换片段如下:

public static void replaceFragment(FragmentActivity parentActivity, int fragmentToReplaceId, Fragment withFragment, Integer enterAnim, Integer exitAnim)
{
    FragmentManager         fragmentManager;
    FragmentTransaction     transaction;

    fragmentManager = parentActivity.getSupportFragmentManager();
    transaction     = fragmentManager.beginTransaction();

    if (    (null != enterAnim) &&
            (null != exitAnim)  )
    {
        transaction.setCustomAnimations(enterAnim, exitAnim);
    }

    transaction.replace(fragmentToReplaceId, withFragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

3 个答案:

答案 0 :(得分:3)

您可以通过在片段中覆盖onResume()方法并将消息发送到活动或直接更改工具栏来通知。

@Override
public void onResume() {
    super.onResume();

    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Title");
}

答案 1 :(得分:0)

通过在片段A中创建一个简单的静态方法来解决:

public static void updateActivityTitle(FragmentActivity activity)
{
    activity.setTitle(kActivityTitle);
}

然后我在片段B中调用此方法如下:

// cancel button has been pressed
private void cancel()
{
    INV_CustomersFragment.updateActivityTitle(getActivity());
    getActivity().getSupportFragmentManager().popBackStackImmediate();
}

不理想,但它完成了工作。涉及适当回调的任何其他解决方案都会更好

<强>更新

更好的解决方案是@Rani在Fragment's onResume() not called when popped from backstack描述的解决方案。这更优雅,更易于维护,事实上我在我的项目中实现了这个解决方案。与iOS的同等解决方案相比,如果你问我,这仍然是混乱的,似乎仍然可行。

答案 2 :(得分:0)

在一个活动中,当替换A ---> B(A和B都是片段)时,可以使用此回调:

 @Override
 public void onAttachFragment(Fragment fragment) {

 }