当片段被替换并且再次可见时回调

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当片段被替换并且再次可见时回调相关的知识,希望对你有一定的参考价值。

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

问题是,当我显示片段A和片段B时,我需要更新活动工具栏以显示不同的标题。我每次从A转到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();
}
答案

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

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

    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Title");
}
另一答案

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

 @Override
 public void onAttachFragment(Fragment fragment) {

 }
另一答案

通过如下在片段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的等效解决方案相比,如果您问我,这仍然很凌乱,似乎仍然可行。

以上是关于当片段被替换并且再次可见时回调的主要内容,如果未能解决你的问题,请参考以下文章

替换的片段在背景上仍然可见

片段里面的片段

通过底部导航栏更改片段时恢复片段状态

当活动被破坏但我必须继续执行片段中的代码时该怎么办?

替换的片段仍然可见

当替换片段视频仍在android中播放背景时