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()类型的交易可以解决这个问题,但我似乎无法让它发挥作用,因此感谢任何帮助/指导/解决方案。希望我的问题已经足够清楚,如果您想了解更多关于我的代码的信息,请询问 - 但我很确定这可能是相关的。

4

1 回答 1

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();
}
于 2013-06-25T00:25:21.847 回答