0

方向が変更されたときに文字列を保存するのに問題があります。私は使ってみましたが、うまくonSaveInstanceState()/onRestoreInstanceState()いきonRetainNonConfigurationInstance()/getLastNonConfigurationInstance()ませんでした。

私は持っている:

@Override
public String onRetainNonConfigurationInstance(){
    final String savedType = currentType;
    return savedType;
}

そしてonCreate()私は持っています:

currentType = (String) getLastNonConfigurationInstance();

これはまだ私にとってはうまくいきませんでした。currentType常にnullオリエンテーションの変更後です。助言がありますか?


リビジョン


これは私が現在持っているものであり、まだ機能していません:

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

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

super考えられるすべての組み合わせで、各メソッドの最初と最後にメソッド呼び出しを配置し​​ようとしましたが、ビューが再度作成されたときにまだ取得していNullPointerExceptionますcurrentType


また


これはダイアログで発生しています。それと関係があるかどうかはわかりませんが、役立つ情報になると思います。



部分的な解決/部分的な新しい質問



だから私はこれを私が望んでいたように動作させました。変数が再び必要とされなくなるライフサイクルの終わりに向かって設定currentTypeされるメソッドに埋め込まれたステートメントがありました。nullそれは今では邪魔になりません。画面の向きは正常に変更されますが、2 つの間で急速に変更された場合は FC になります。これは、この状態で動作させるために使用したものです。

クラス フィールド:

private String currentType;

私が持っているの最後にonCreate

currentType = (String) getLastNonConfigurationInstance();

その後:

@Override
public Object onRetainNonConfigurationInstance() {
    final String s = currentType;
    return s;
}

向きが変わらず、すぐに元に戻せば問題なく動作します。デパートや小売店がこれを使用している/使用する予定であり、人々がそれを落としているのを見ることができるため、これを修正したいと思います。これにより、FC が発生します (テストのためにソファに落としました)。格納する文字列は 1 つだけなので、メモリをあまり消費しません。この新しい状況に対する提案はありますか?

4

2 に答える 2

1

バンドルに入れてみましたか?

private static final String CURRENT_TYPE = "currentType";
private static final String DEFAULT_TYPE = "defaultType";
@Override
protected void onSaveInstanceState (Bundle outState) {
  outState.putString(CURRENT_TYPE, currentType);
  super.onSaveInstanceState(outState);
}
@Override
protected void onCreate (Bundle savedInstanceState) {
  ...
  currentType = (savedInstanceState == null)? null : 
        savedInstanceState.getString(CURRENT_TYPE, DEFAULT_TYPE);
  ...
}
于 2012-01-13T22:00:04.380 に答える