我是Android的初學者,我對共享首選項實現有困惑。我的目標是在用戶定義一些將在MainFragment中使用的文本時使用一個字符串。鑑於用戶在運行應用程序時可能會更改該字符串,我還需要一個偵聽器。所以根據迄今爲止的一本書,我有一個SettingsActivity和一個SettingsFragment。Android SharedPreferences混淆
SettingsActivity至今:
public class SettingsActivity extends AppCompatActivity {
private SharedPreferences prefs;
private String stringIWantToSave;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
getFragmentManager().beginTransaction().
replace(android.R.id.content, new SettingsFragment(), "settings_fragment").commit();
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
}
@Override
protected void onResume() {
super.onResume();
stringIWantToSave = prefs.getString("stringIWantToSave", "myString");
}
}
SettingsFragment至今:
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
private SharedPreferences sharedPreferences;
private String stringIWantToSave;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
}
@Override
public void onPause() {
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
super.onPause();
}
@Override
public void onResume() {
super.onResume();
sharedPreferences.getString("stringIWantToSave", "myString");
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
}
}
我的問題是:
•在哪一種方法,我應該如何保存在用戶更改的價值?
•如何實現偵聽器,以便它通知MainFragment字符串已更改?
這些都是班設置活動和片段,你可能不會需要他們。我不知道你在做什麼,但是如果你知道用戶什麼時候可以改變這個字符串,你可以在它後面檢查它是否有變化。 SharedPreferences可用於所有Activity和Fragment類。 – fapps
@fapps我想提供用戶改變的能力讓我們說他的名字。我決定放置一個菜單,並在菜單內放置一個標籤,其中EditTextPreference將允許用戶寫下他的名字。這就是爲什麼我創建了這些類。 – kDoyle
因此,如果您在xml佈局中使用EditTextPreference,只需使用'key =「stringIWantToSave」'設置鍵值,並且您可以完成所有需要的操作。沒有額外的代碼。 – fapps