【发布时间】:2019-12-18 17:57:00
【问题描述】:
我有一个简单的问题。我找不到在我的活动之间使用 sharedPreferences 的方法。其中一个是 Settingsactivity,另一个是我的 MainActivity。我想将 SettingsActivity 中的变量(show_idle_dialog 和 selected_currency)保存到 sharedPreferences 并将其加载到 MainActivity。使用我当前的代码,MainActivity 总是加载 defValue。
设置活动:
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
public class SettingsActivity extends AppCompatActivity {
public static final String KEY_PREF_CHECK_BOX_SHOW_IDLE_DIALOG = "check_box_show_idle_dialog";
public static final String KEY_PREF_CURRENCY_DROPDOWN = "currency_dropdown";
Boolean show_idle_dialog;
String selected_currency;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
show_idle_dialog = sharedPreferences.getBoolean(SettingsActivity.KEY_PREF_CHECK_BOX_SHOW_IDLE_DIALOG, true);
selected_currency = sharedPreferences.getString(SettingsActivity.KEY_PREF_CURRENCY_DROPDOWN, "currency_eur");
Log.i("abc", "put " + show_idle_dialog);
Log.i("abc", "put " + selected_currency);
}
}
MainActivity:
public class MainActivity extends AppCompatActivity {
public static final String SHARED_PREFS = "sharedPrefs";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
PreferenceManager.setDefaultValues(this, R.xml.root_preferences, false);
}
@Override
public void onResume(){
loadData();
super.onResume();
}
public void loadData(){
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
show_idle_dialog = sharedPreferences.getBoolean(SettingsActivity.KEY_PREF_CHECK_BOX_SHOW_IDLE_DIALOG, false);
selected_currency = sharedPreferences.getString(SettingsActivity.KEY_PREF_CURRENCY_DROPDOWN, "currency_eur");
Log.i("abc", "got " + show_idle_dialog);
Log.i("abc", "got " + selected_currency);
}
如果有人知道我做错了什么,我会很高兴。
【问题讨论】:
-
在设置活动中你有
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this),但在另一个活动中SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);。那当然是错误的。您应该使用相同的。 -
在设置活动中你不必自救。
标签: java android android-activity sharedpreferences