2016-07-13 10 views
0

Androidスタジオの使用方法を学習していて、自分のアクティビティの状態を保存しようとしています。 onSaveInstanceStateメソッドで何か問題があります。コードを実行すると、savedInstanceStateは常にnullになるからです。問題を解決するにはどうすればよいですか?私は何時間も試してきましたが、何が間違っているのか分かりません。ここにmainActivityファイルに関連するものがあります。アクティビティの状態を正しく保存して復元する方法は?

public class MainActivity extends AppCompatActivity { 

    public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE"; 
    static final String LAST_MESSAGE = "com.example.myfirstapp.LAST_MESSAGE"; 
    String message, displayMessage; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     System.out.println("Restoring"); 
     System.out.println(savedInstanceState); 
     if (savedInstanceState != null) { 
      displayMessage = "Last Saved Message: " + savedInstanceState.getString(LAST_MESSAGE); 
     } 
     else { 
      displayMessage = "No Messages Saved!"; 
     } 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, displayMessage, Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 
     savedInstanceState.putString(LAST_MESSAGE, message); 

     super.onSaveInstanceState(savedInstanceState); 
    } 

    public void sendMessage(View view) { 
     Intent intent = new Intent(this, DisplayMessageActivity.class); 
     EditText editText = (EditText) findViewById(R.id.edit_message); 
     message = editText.getText().toString(); 
     intent.putExtra(EXTRA_MESSAGE, message); 
     startActivity(intent); 
    } 
} 
+0

「savedInstanceState」はどのようにあると思いますか?そのアクティビティで 'startActivity'を実行すると、そのアクティビティは保存されません。画面を回転させてみましたか? –

+0

'onSaveInstanceState'メソッドがどのようにトリガされるかについては、[この図](https://developer.android.com/images/fundamentals/restore_instance.png)を参照してください。 –

+0

コード内のデータは、画面を回転するときにのみ保存されます。シンプルなデータを保存したい場合は、Sharedpreferenceを使用するか、大きなデータを保存するとデータベース(例:SQLite、Realm ...)で保存できます。 –

答えて

0

まず、アクティビティのライフサイクルを理解する必要があります。 https://developer.android.com/guide/components/activities.html

これも読んでください。 When are onSaveInstanceState() and onRestoreInstanceState() called, exactly?

つまり、最初にアクティビティを実行したときにはsavedInstanceStateがnullになります。どのページからでもMainActivityに戻ると、onRestoreInstanceStateから何かを得ることができます。

関連する問題