碎片标题消失(也许是在进程被杀死后)?

时间:2013-06-24 18:02:46

标签: android android-fragments android-actionbar

我有一个简单的FragmentActivity,其中包含三个片段,每个片段包含以下方法,用于在用户滚动到每个片段时设置标题。

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

pageTitle显然因片段而异。这可以按照需要工作,除非在离开应用程序一段时间后有时重新打开(到FragmentActivity)标题不存在,在滚动片段时也不会设置。我被告知这可能是因为申请程序被杀等等。

有人知道如何处理这种情况吗?一个可能性是可能在该过程被杀死后从主应用程序加载应用程序(不理想,但由于我的应用程序的工作方式它不应该是一个大问题),但我不知道如何去做这样做。

此外,pageTitle设置在Fragment的新实例中,该实例是从FragmentAdapter调用的(如下所示) - 这可能是问题的根源,因为它们正在被重建?只是硬编码标题的文本会更好吗?

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

通过以下方式设置它是否可以解决问题(我可以测试它,但因为需要时间,我想我会在这里问它,因为我只是想到它):

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

我知道可能有一些onResume()类型的交易可以解决这个问题,但我似乎无法让它工作,所以任何帮助/指导/解决方案都值得赞赏。希望我已经明确地提出了我的问题,如果你想知道关于我的代码的任何更多信息,请问 - 但我很确定这些可能是相关的。

1 个答案:

答案 0 :(得分:0)

正如我在问题中所想的那样,对字符串进行硬编码或在pageTitle内设置onResume()可以解决问题。

只是为这个答案添加一点:

newInstance()仅在初始创建FragmentActivity时调用,因此字符串仅传递一次。当应用程序稍后恢复时,不会调用newInstance(),并且片段只会从它们所在的位置重建自己。显然因为字符串没有通过newInstance()传递,字符串pageTitle现在只是空。

为了解决这个问题,我只是对类中的字符串进行了硬编码:

private String pageTitle = "myTitle";

但是,如果只想从你的适配器获取它,你总是可以在你的onResume()中调用你的适配器中的getTitle(它可以做得更好,它仅用于演示目的):

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