0

バーコードをスキャンするアプリに取り組んでいます。スキャンが成功すると、スキャンされたコードを含むダイアログが表示され、バー/QR コードに含まれていたものに応じて、ブラウザを開くボタンが表示されます。 SMS などを送信します。ダイアログが表示されている間に、画面の向きが変わるとクラッシュします。クラッシュする前に方向が数回変わる可能性があるところまで動作しましたが、LogCat を確認すると、NullPointerException が FC を引き起こしていると表示されます。@CommonsWareの提案を実装する前に、クラッシュする前に任意の回数回転させることができましたが、それらを実装して以来、FCは常に2番目の向きの変更に基づいています。これを起動するとdebug mode電話を何度でも好きなだけ速く回転させることができますが、通常モードで起動するとすぐにクラッシュします。

クラス フィールド:

private String currentType;

私は実装しましたonSaveInstanceState()

@Override
public void onSaveInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);    
    outState.putString("savedType", currentType);
}

またonRestoreInstanceState()

@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);
    currentType = savedInstanceState.getString("savedType");
}

アップデート


@CommonsWareの提案に従って、上記のコードを現在のものに更新しました。また、整合性のために投稿を編集しました。

CM7 (Android バージョン - 2.3.7、カーネル バージョン - 2.6.37.6-cyanogenmod-g0799e00 android@portatile #1、Mod バージョン - CyanogenMod-7-11152011-NIGHTLY-N1、ビルド番号 - GWK74) も使用しています。

4

1 に答える 1

1

onPause() で this.onRetainNonConfigurationInstance() を使用してそれを修正しようとしましたが、違いはないようです。

あなたは電話しませんonRetainNonConfigurationInstance()。Android の呼び出しonRetainNonConfigurationInstance()

向きの変更の処理について読んだすべての投稿によると、これはうまくいくはずだと私には思えます。

より良いソースを使用する必要があります。

コードの修復を試みるには:

ステップ #1:マニフェストandroid:configChangesから属性を削除します<activity>

ステップ #2:onConfigurationChanged()メソッドを削除する

ステップ #3:onResume()ロジックonCreate()を populateに移動するか、前currentTypeに使用しようとしないでください。currentTypeonResume()

/全体をonRetainNonConfigurationInstance()/に置き換えて、.getLastNonConfigurationInstance()onSaveInstanceState()onRestoreInstanceState()StringBundle

の使用方法を示すサンプル プロジェクトを次に示しますonSaveInstanceState()の使用方法を示すサンプル プロジェクトを次に示しますonRetainNonConfigurationInstance()

于 2012-01-16T17:23:12.020 に答える