0

私は3つのフラグメントを含む単純なものを持って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はただの null になります。

これに対抗するために、クラス内の文字列をハードコーディングしました。

private String pageTitle = "myTitle";

ただし、アダプターからのみ取得することが望ましい場合は、次のようにアダプターからいつでも getTitle を呼び出すことができますonResume()(これはデモ目的のためだけに、はるかに優れた方法で実行できます)。

@Override
public void onResume(){
    super.onResume();
    pageTitle = new MyFragmentAdapter().getPageTitle(myPageNumber).toString();
}
于 2013-06-25T00:25:21.847 に答える