1

レイアウトなしでフラグメントを使用します(バックグラウンドでファイルをダウンロードします)。画面の向きを変えた後に再びアタッチされることを想定して、最初にアクティビティが作成されたときに一度追加しますが、そうではありません!
作成時のアクティビティ:

if (savedInstanceState == null) {
    getSupportFragmentManager().beginTransaction()
            .add(new FragmentDownloadApp(), FragmentDownloadApp.TAG)
            .commit();
} else {
    if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {

フラグメント onActivityCreated:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    // this is really important in order to save the state across screen
    // configuration changes for example
    setRetainInstance(true);

    // ---- magic lines starting here -----
    // call this to re-connect with an existing
    // loader (after screen configuration changes for e.g!)
    LoaderManager lm = getLoaderManager();
    if (lm.getLoader(LOADER_DOWNLOAD_APP) != null) {
        lm.initLoader(LOADER_DOWNLOAD_APP, null, mDownLoader);
    }
    // ----- end magic lines -----
}

そしてエラー:

public void onPositiveClick() {
            FragmentDownloadApp fragment = (FragmentDownloadApp) getSupportFragmentManager()
                    .findFragmentByTag(FragmentDownloadApp.TAG);
            fragment.startDownload(mAppToDownload);
        }

NullPointerException が表示されます。

4

1 に答える 1

0

見つかった答え:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState); // NEED THIS!
于 2013-02-08T23:12:40.790 に答える