Я пытаюсь прослушать SharedPreferences
изменений в MainActivity
. И обновите значения в настройках приложения. И рабочий код выглядит следующим образом:Прослушивание изменений SharedPreferences в MainActivity
private SharedPreferences SP, prefs;
SharedPreferences.OnSharedPreferenceChangeListener mListener;
SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
mListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
Toast.makeText(MainActivity.this, "Key changed: "+key, Toast.LENGTH_SHORT).show();
}
};
SP.registerOnSharedPreferenceChangeListener(mListener);
Но когда я пытаюсь изменить значение ключа, как это. Он говорит, что не может решить метод findPreference
. Я пробовал делать это с использованием контекста, но все же ошибка сохраняется.
private SharedPreferences SP, prefs;
SharedPreferences.OnSharedPreferenceChangeListener mListener;
SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
mListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("username")) {
Preference pref = findPreference(key);
pref.setDefaultValue(prefs.getString(key, "bob")); }
};
SP.registerOnSharedPreferenceChangeListener(mListener);
Как мы можем импортировать определение метода в MainActivity
. Пожалуйста, сообщите, способ, которым я меняю значение здесь, если это правильно?
Settings.java
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.os.Bundle;
public class Settings extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
}
public static class MyPreferenceFragment extends PreferenceFragment
{
PrefManager prefManager;
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
}
preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference android:title="Your Name"
android:key="username"
android:summary="Please provide your username">
</EditTextPreference>
</PreferenceScreen>
Я в принципе хочу, чтобы обновить Выбираю на странице настроек, когда SharedPreferences
клавиши "username
" становится изменение кода.
Почему вы ожидаете это знать, что 'findPreference' это? Вы не заявили об этом (не в коде, который вы показали как минимум). Что вы пытаетесь сделать в первую очередь? Если вы можете рассказать мне больше, я могу помочь вам. – Sweeper
Как сказал Sweeper, разместите свой код для поиска. В Anysays просто используйте префикс var, переданный в методе, чтобы изменить его. – Memme
@Sweeper Я добавил свой файл settings.java и preferences.xml. И последняя строка говорит, чего я хочу достичь в MainActivity.java – impossible