私はこの問題で3日間、私を殺しています。 プログラムは最初にプリファレンスを作成しますが、その後は変更されません。共有環境設定は初めて保存されただけです
これは、xmlが呼び出されるPreferencesScreenです。
public class PreferencesScreen extends PreferenceFragment{
private final String TAG = "PreferencesScreen";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "OnCreate");
addPreferencesFromResource(R.xml.prefs);
}
環境設定では、私は電子メールを格納するためのアクティビティを呼び出すListPreferenceとPreferenceを持っています。
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="Information Collected">
<ListPreference
android:key="loggins"
android:title="Logs Stored"
android:summary="Choose the top kind of logs do you want to store."
android:dialogTitle="Choose Logs"
android:entries="@array/logs"
android:entryValues="@array/logsValues"/>
</PreferenceCategory>
<PreferenceCategory android:title="Email Configurations">
<Preference
android:key="pushing"
android:title="The Email Activity"
android:summary="Just push">
<intent android:action = "ADDING_EMAIL"/>
</Preference>
</PreferenceCategory>
</PreferenceScreen>
すべてここまでです。私は別の電子メールを追加するとき、私は好みで変更をdoesnt't場合は問題が
public class AddingEmail extends ListActivity implements OnClickListener{
private Set<String> emails;
private EditText emailAdd;
SharedPreferences.Editor editor;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.addingemail);
Button add = (Button) findViewById(R.id.add);
emailAdd = (EditText) findViewById(R.id.email);
prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
editor = prefs.edit();
prefList = toArrayList(prefs.getStringSet("emailWrongs", null));
add.setOnClickListener(this);
}
public void onClick(View v) {
Set<String> list = prefs.getStringSet("emailWrongs", null);
String newEmail = emailAdd.getText().toString();
if (list==null){ //first time the preferences are called.
emails = new TreeSet<String>();
editor.putStringSet("emailWrongs", emails);
editor.apply();
}
if (newEmail != ""){
emails=prefs.getStringSet("emailWrongs", null);
emails.add(newEmail);
editor.putStringSet("emailWrongs", emails);
editor.apply();
}
}
}
ポイントは、それが常にうまく最初の時間を保存することである...と呼ばれる活動しているけど。私が追加した電子メールはすべて表示されますが、環境設定ファイルは変更されません(ファイルエクスプローラで確認しているため)。再起動した場合や閉じて再度開いた場合、環境設定は最初に追加したメールのみになります。 問題は、私がListPreferenceのプリファレンスを変更して変更した場合、追加した電子メールの変更もすべて保存することです。
希望していたので、私は非常に明示したいので、コードがたくさんあります。 ありがとうございました。
。 prefShared = getApplicationContext()。getSharedPreferences( "com.example.daemon3_preferences"、MODE_PRIVATE);同じ結果の – Alberto