2013-06-24 26 views
0

我有一個簡單的FragmentActivity其中包含三個片段,每個包括以下方法來設置標題時,用戶滾動到每個片段。片段標題消失(也許在過程被殺死後)?

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     getActivity().setTitle(pageTitle); 
    } 
} 

pageTitle根據片段明顯不同。這可以根據需要運行,除非在重新打開(到FragmentActivity)時有時候離開應用程序一段時間後,標題不存在,在滾動片段時也不會設置。我被告知,這可能是因爲申請過程被殺害等。

有沒有人有任何想法我可以去處理這種情況?一種可能性可能是在進程被終止後從主應用程序加載應用程序(不理想,但由於我的應用程序的工作方式,這應該不是什麼大問題),但我不知道如何去做正在做。

此外,pageTitle設置在從FragmentAdapter調用的Fragment的新實例中(如下所示) - 這可能是問題的根源,因爲它們正在重建?硬編碼標題文本會更好嗎?

public static Fragment newInstance(String title) { 
    pageTitle = title; 
    return new Fragment(); 
} 

難道解決問題通過以下(我可以測試它,而是因爲它需要時間,我想我會問它在這裏,因爲我剛剛想到這一點)來設置它:

getActivity().setTitle("Page Title");

我知道可能有一些onResume()類型的交易來解決這個問題,但我似乎無法得到它的工作,所以任何幫助/指導/解決方案表示讚賞。希望我已經明確地表達了我的問題,如果您想了解更多關於我的代碼的內容,只要問一下 - 但我確信這就是所有可能相關的內容。

回答

0

這是我想的問題,無論是硬編碼字符串還是設置pageTitle裏面onResume()固定的問題。

我想補充一點,以這樣的回答:

newInstance()只呼籲最初創建FragmentActivity因此字符串只穿過一次的。當應用程序稍後恢復時,newInstance()未被調用,碎片只是從它們所在的位置重建。很明顯,因爲字符串未通過newInstance()傳遞,字符串pageTitle現在只是空。

爲了解決這個問題,我只是硬編碼字符串中的類:

private String pageTitle = "myTitle";

但是,如果它只是需要從您的適配器得到它,你總是可以在打電話的getTitle從您的適配器的onResume()像這樣(它可以做得更好,它僅用於演示目的):

@Override 
public void onResume(){ 
    super.onResume(); 
    pageTitle = new MyFragmentAdapter().getPageTitle(myPageNumber).toString(); 
}