2016-01-19 31 views
0

我一直在研究这个主题,但到目前为止还没有运气。基本上我用FragmentTransaction.replace替换一个片段(A)与另一个(B)。在这个其他片段(B)中,我有一个工具栏中的“取消”按钮,当它按下时,通过调用getActivity().getSupportFragmentManager().popBackStackImmediate()弹出回到先前的事务(A)。当片段被替换并且再次可见时的回调

问题是我需要更新活动工具栏来显示一个不同的标题,当我显示片段A和片段B.我似乎无法找到一个方法,每当我从A - > B - > A通知我它再次可见。这个想法是设置这个回调中的工具栏标题,我似乎无法找到。

任何人都可以指出我正确的方向吗?

干杯。

编辑:

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

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(); 
} 

回答

2

可以通过在片段重写方法的onResume()和将消息发送到活动通知或直接更改工具栏。

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

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

它在片段中调用,而不是在Activity中。 – geNia

+0

对不起!我的意思是片段而非活动。换句话说,当我从片段A - >将片段A替换为片段B - >弹出到片段A时,此时片段A中的onResume不会被调用。这两个片段都在同一个活动中。 – Nokiaowner

+0

@Nokiaowner这很奇怪,因为它应该。你应该错过一些东西。 – geNia

0

通过创建一个片段一个简单的静态方法如下解决:

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的同等解决方案相比,如果你问我,这仍然是一团糟,似乎仍然是这样。

相关问题