0

私のアプリケーションでは、電話がポートレートモードで保持されている場合、ファイル名を取得できます。

電話を回転させると、同じファイルが設定を取得するために使用されていますが、この特定の設定は空白に戻ります。

この設定に書き込む1つの関数を確認しましたが、電話を回転させても呼び出されません。

sharedpreferencesそれで、電話を回転させることによる変化の原因は何でしょうか?

これが私が使用するコードです:

static String retrieveStoredFilename(Context context) {
    SharedPreferences myPrefs = context.getSharedPreferences(PREF_NAME,
            Context.MODE_PRIVATE);
    String s = myPrefs.getString(FILENAME, "");

    return TextUtils.isEmpty(s) ? (String) null : s;
}

それが役立つ場合に備えて、ここにいくつかのコードがあります。これは、回転によって実際に台無しにされたフラグメントからのものです。onResumefilenameでは、回転後にnullに設定されますが、それ以降は、回転して戻ってもnullになります。

@Override
public void onPause() {
    super.onPause();
    mIV.getBitmap().recycle();
    mIV.setImageResource(R.drawable.ic_action_search);
    if (myBitMap != null)
        myBitMap.recycle();
}

@Override
public void onResume() {
    super.onResume();
    filename = ControllerFragment.retrieveStoredFilename(getActivity());
    getBitmap(filename);
    mIV.invalidate();
    }

そして、2つの定数は次のとおりです。

public static String FILENAME = "filename";
public static String PREF_NAME = "photobrowser";
4

2 に答える 2

1

私が見る唯一の可能性は、FILENAMEの値が永続化されていないことです。Androidでのアクティビティとアクティビティの保存状態のライフサイクルを調べる価値があるかもしれません。

これは、構成の変更に関するAndroidドキュメントからの成果です。

特に指定しない限り、構成の変更(画面の向き、言語、入力デバイスなどの変更など)により、現在のアクティビティが破棄され、通常のアクティビティライフサイクルプロセスである、、onPause()が適切onStop()に実行onDestroy()されます。アクティビティがフォアグラウンドにあるか、ユーザーに表示されているonDestroy()場合、そのインスタンスで一度呼び出されると、前のインスタンスが生成したsavedInstanceStateを使用して、アクティビティの新しいインスタンスが作成され onSaveInstanceState(Bundle)ます。

onResume()このため、向きを変えた後にあなたが呼ばれることはありません。アクティビティは、ライフサイクル全体を通じてになりますonDestroy()onCreate()それはあなたの活動の新しいインスタンスであるため、向きの変更が呼び出された後。

于 2012-11-07T03:37:40.253 に答える
1

アプリケーションのライフサイクルを確認してください。onCreate()、onPause()などで何をしますか?たぶん、あなたはその設定エントリをクリアしています。これが言うように

特に指定しない限り、構成の変更(画面の向き、言語、入力デバイスなどの変更など)により、現在のアクティビティが破棄され、onPause()、onStop()、およびの通常のアクティビティライフサイクルプロセスが実行されます。必要に応じてonDestroy()。アクティビティがフォアグラウンドにあるか、ユーザーに表示されている場合、そのインスタンスでonDestroy()が呼び出されると、前のインスタンスがonSaveInstanceState(Bundle)から生成したsavedInstanceStateを使用して、アクティビティの新しいインスタンスが作成されます。

于 2012-11-07T03:45:45.553 に答える