2016-01-19 62 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的同等解決方案相比,如果你問我,這仍然是一團糟,似乎仍然是這樣。

相關問題