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