1. ホーム
  2. android

[解決済み] onSavedInstanceStateの使い方の例を教えてください。

2022-10-15 19:45:39

質問

状態を保存するときに混乱しています。だから私は知っている onSaveInstanceState(Bundle) はアクティビティが破壊されようとするときに呼び出されます。しかし、どのようにして情報をそこに保存し、それを元の状態に戻すには onCreate(Bundle savedInstanceState) ? このバンドルがどのように情報を復元するのか理解できません。どなたか例を示していただけると助かります。 開発ガイドでは、これを説明するのに良い仕事はしていません。

public class Conversation extends Activity {
    private ProgressDialog progDialog;
    int typeBar;
    TextView text1;
    EditText edit;
    Button respond;
    private String name;
    private String textAtView;
    private String savedName;

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        setContentView(R.layout.dorothydialog);
        text1 = (TextView)findViewById(R.id.dialog);
        edit = (EditText)findViewById(R.id.repsond);
        respond = (Button)findViewById(R.id.button01);

        if(savedInstanceState != null){
            savedInstanceState.get(savedName);
            text1.setText(savedName);
        }
        else{
            text1.setText("Hello! What is your name?");
            respond.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    name = edit.getText().toString();
                    text1.setText("Nice to meet you "+ name);
                }   
            });
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);
        outState.putString(savedName, name);
    }
}

どのように解決するのですか?

この Bundle は、保存したいすべての情報を入れる容器です。そこにデータを挿入するためにput*関数を使います。以下は、にデータを格納するために使用できるput関数の短いリストです(もっとあります)。 Bundle .

putString
putBoolean
putByte
putChar
putFloat
putLong
putShort
putParcelable (used for objects but they must implement Parcelable)

あなたの onCreate 関数では、この Bundle はプログラムに引き渡されます。アプリケーションが再読み込みされているか、初めて起動されたかを確認する最良の方法です。

if (savedInstanceState != null) {
    // Then the application is being reloaded
}

データを取り出すには、put*関数と同じようにget*関数を使用します。データは名前と値のペアで保存されます。これはハッシュマップのようなものです。キーと値を与え、値を戻したいときにキーを与えれば、関数が値を取得します。以下に簡単な例を示します。

@Override
public void onSaveInstanceState(Bundle outState) {
   outState.putString("message", "This is my message to be reloaded");
   super.onSaveInstanceState(outState);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        String message = savedInstanceState.getString("message");
        Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    }
}

保存されたメッセージは、画面にトーストされます。お役に立てれば幸いです。