I have implemented the settings screen of my app using PreferenceFragment. When the up button in the toolbar of the settings screen is clicked my app returns to the MainActivity screen but the data that was previously entered into the EditTexts (before going to the settings screen) is lost and the EditTexts are all blank.
I tried implementing onSaveInstanceState and onRestoreInstanceState but it is not working because onRestoreInstanceState is not called when clicking the up button in the settings screen toolbar. The savedInstanceState is also null in onCreate.
Would really appreciate it if someone could point out how to go about restoring the data in the EditTexts please? :)
Here's the log for MainActivity:
Clicking on Settings from toolbar menu:
I/LOG: onPause
I/LOG: onSaveInstanceState saving
I/LOG: onStop
Clicking on back button in settings screen toolbar:
I/LOG: onDestroy
I/LOG: onCreate
I/LOG: savedInstanceState is null
I/LOG: onStart
I/LOG: onResume
MainAcitivy.java
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import android.util.Log;
//...
public class MainActivity extends AppCompatActivity {
Toolbar toolbarMain;
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i("LOG", "onCreate");
super.onCreate(savedInstanceState);
Log.i("LOG", "savedInstanceState is " + savedInstanceState);
if(savedInstanceState !=null) {
editText.setText(savedInstanceState.getString("ET_KEY"), TextView.BufferType.EDITABLE);
}
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.myEditText);
toolbarMain = (Toolbar) findViewById(R.id.toolbar);
toolbarMain.setTitle(R.string.app_name);
toolbarMain.inflateMenu(R.menu.menu_main);
toolbarMain.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
startActivity(new Intent(MainActivity.this, SettingsActivity.class));
}
return true;
}
});
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
Log.i("LOG", "onRestoreInstanceState");
super.onRestoreInstanceState(savedInstanceState);
editText.setText(savedInstanceState.getString("ET_KEY"), TextView.BufferType.EDITABLE);
}
@Override
public void onSaveInstanceState(Bundle outState) {
Log.i("LOG", "onSaveInstanceState saving");
outState.putString("ET_KEY", editText.getText().toString());
}
@Override
public void onPause() {
Log.i("LOG", "onPause");
super.onPause();
}
@Override
public void onStop() {
Log.i("LOG", "onStop");
super.onStop();
}
@Override
public void onDestroy() {
Log.i("LOG", "onDestroy");
super.onDestroy();
}
@Override
public void onStart() {
Log.i("LOG", "onStart");
super.onStart();
}
@Override
public void onResume() {
Log.i("LOG", "onResume");
super.onResume();
}
SettingsActivity.java
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
public class SettingsActivity extends AppCompatActivity {
SharedPreferences sharedPref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.preferences_layout);
sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Display the fragment as the main content.
getFragmentManager().beginTransaction()
.replace(R.id.pref_content, new SettingsFragment())
.commit();
}
}