Урок 71. Preferences как настройки приложения. PreferenceActivity
Re: Урок 71. Preferences как настройки приложения. Preferenc
Здравствуйте! Подскажите, пожалуйста, как вывести название выбранного рингтона (используется RingtonePreference)? В данном случае, при использовании, например,
sPref = PreferenceManager.getDefaultSharedPreferences(this);
String sp = sPref.getString("ringtone_pref", "");
будет выводиться ссылка вида content://settings/system/ringtone.
Заранее спасибо.
sPref = PreferenceManager.getDefaultSharedPreferences(this);
String sp = sPref.getString("ringtone_pref", "");
будет выводиться ссылка вида content://settings/system/ringtone.
Заранее спасибо.
Re: Урок 71. Preferences как настройки приложения. Preferenc
Есть метод getRingtone (http://developer.android.com/reference/ ... etRingtone(android.content.Context, android.net.Uri))
Получите Ringtone.
А потом есть метод getTitle (http://developer.android.com/reference/ ... t.Context)), который вернет название.
Правда, это все мои догадки. Я не пробовал так делать )
Посмотрите еще эту тему - viewtopic.php?f=37&t=161
Получите Ringtone.
А потом есть метод getTitle (http://developer.android.com/reference/ ... t.Context)), который вернет название.
Правда, это все мои догадки. Я не пробовал так делать )
Посмотрите еще эту тему - viewtopic.php?f=37&t=161
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 71. Preferences как настройки приложения. Preferenc
Что-то не пойму как получить значения настроек. Есть активити. Есть сервис, в другом процессе. Как получить значения настроек, если при getDefaultSharedPreferense нам надо указать контекст? getApplicationContext не дало нужного результата. Как вытащить значения ?
Re: Урок 71. Preferences как настройки приложения. Preferenc
Код: Выделить всё
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
CEO of a company R.id.team
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 71. Preferences как настройки приложения. Preferenc
Не буду долго объяснять, просто приведу исходный код. Думаю там без лишних слов все понятно.
Код: Выделить всё
347 public static SharedPreferences getDefaultSharedPreferences(Context context) {
348 return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
349 getDefaultSharedPreferencesMode());
350 }
351
352 private static String getDefaultSharedPreferencesName(Context context) {
353 return context.getPackageName() + "_preferences";
354 }
355
356 private static int getDefaultSharedPreferencesMode() {
357 return Context.MODE_PRIVATE;
358 }
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 71. Preferences как настройки приложения. Preferenc
Да, я знаю про это дело, о чем вы написали. Собственно это я и пробовал, но не получалось.
Я немного побуду сейчас в роли Девида Блейна =)
Решение нашел, но в чем проблема, до сих пор не пойму. Напомню, что сервис в другом процессе, но приложение тоже. В активити всё хорошо обновляется, поэтому я её не беру в учёт. Итак есть сервис
Бродкаст стоит на слушателе в активности настроек. Т.е. как они сменились, так кидается бродкаст.
Как вы думаете, будет ли работать? Если да, то вы ошибаетесь. Нифига такое решение не работает. Выводятся дефолтные настройки для ключей.
Изменим немного updateSettings на вот так.
Т.е. мы получаем тот же SharedPreferences, что получали в onCreate, но через статический класс. Но для одного ключа! В итоге треш получим, а именно:
Второе значение изменяется на ура, но вот первое...
По логике оно не должно меняться, коль в первом моем показанном варианте ничего не менялось, но оно принимает своё прошлое выбранное значение! Поясню.
Допустим там выбор buttons в очередь и равны они 1 2 3 4 5
Дефолтное 1. Нажимаем на 2. На экран выведется один. Далее нажмем 3, на экран выведется 2 !! Нажмем 5, выведется 3, нажмем 1, выведется 5. Вот как это понимать?
А вот так вот работает
Вот такие вот дела.
А еще меня сегодня убило то, что в ListPreferences нельзя выводить ничто другое, кроме как массивов типа String. Убил пол дня на поиск проблемы, откуда NullPointerException там. Вот про эту багу, если кому интересно. http://code.google.com/p/android/issues/detail?id=2096
Я немного побуду сейчас в роли Девида Блейна =)
Решение нашел, но в чем проблема, до сих пор не пойму. Напомню, что сервис в другом процессе, но приложение тоже. В активити всё хорошо обновляется, поэтому я её не беру в учёт. Итак есть сервис
Код: Выделить всё
public void onCreate() {
super.onCreate();
mPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
}
private void updateSettings() {
minZoom = Integer.parseInt(mPreferences.getString("preload_maps_min_zoom_key", "11"));
whenUseGsm = Integer.parseInt(mPreferences.getString("when_use_gsm_key", "0"));
Log.d("sample", "minZoom "+minZoom);
Log.d("sample", "when use gsm"+whenUseGsm);
}
private void createSettingsReceiver() {
settingsReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(App.I_SETTINGS_CHANGED)) {
updateSettings();
}
}
};
IntentFilter intentFilter = new IntentFilter(App.I_SETTINGS_CHANGED);
registerReceiver(settingsReceiver, intentFilter);
}
Как вы думаете, будет ли работать? Если да, то вы ошибаетесь. Нифига такое решение не работает. Выводятся дефолтные настройки для ключей.
Изменим немного updateSettings на вот так.
Код: Выделить всё
private void updateSettings() {
minZoom = Integer.parseInt(mPreferences.getString("preload_maps_min_zoom_key", "11"));
whenUseGsm = Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("when_use_gsm_key", "0"));
Log.d("sample", "minZoom "+minZoom);
Log.d("sample", "when use gsm"+whenUseGsm);
}
Второе значение изменяется на ура, но вот первое...
По логике оно не должно меняться, коль в первом моем показанном варианте ничего не менялось, но оно принимает своё прошлое выбранное значение! Поясню.
Допустим там выбор buttons в очередь и равны они 1 2 3 4 5
Дефолтное 1. Нажимаем на 2. На экран выведется один. Далее нажмем 3, на экран выведется 2 !! Нажмем 5, выведется 3, нажмем 1, выведется 5. Вот как это понимать?
А вот так вот работает
Код: Выделить всё
private void updateSettings() {
mPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
minZoom = Integer.parseInt(mPreferences.getString("preload_maps_min_zoom_key", "11"));
whenUseGsm = Integer.parseInt(mPreferences.getString("when_use_gsm_key", "0"));
Log.d("sample", "minZoom "+minZoom);
Log.d("sample", "when use gsm"+whenUseGsm);
}
А еще меня сегодня убило то, что в ListPreferences нельзя выводить ничто другое, кроме как массивов типа String. Убил пол дня на поиск проблемы, откуда NullPointerException там. Вот про эту багу, если кому интересно. http://code.google.com/p/android/issues/detail?id=2096
Re: Урок 71. Preferences как настройки приложения. Preferenc
Скажите а как в PreferenceActivity сделать свой стиль например задний фон и цвет текста?
Re: Урок 71. Preferences как настройки приложения. Preferenc
Вот тут глянь, может, поможет: viewtopic.php?f=25&t=912
Re: Урок 71. Preferences как настройки приложения. Preferenc
смотрите нативную тему андроида, там есть атрибуты preferenceScreenStyle, preferenceFragmentStyle, preferenceCategoryStyle и т.д., в зависимости от того что вам нужно такой стиль и переопределяетеxottabut писал(а):Скажите а как в PreferenceActivity сделать свой стиль например задний фон и цвет текста?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 71. Preferences как настройки приложения. Preferenc
Скажите,
выполнила тестовый пример из урока, но при возврате из меню у меня повторно выполняется OnCreate() и только потом OnResume(). Может где-то надо специально указывать такое поведение?
Т.е. выполнение OnCreate каждый раз при выходе из меню это нормально или нет?
выполнила тестовый пример из урока, но при возврате из меню у меня повторно выполняется OnCreate() и только потом OnResume(). Может где-то надо специально указывать такое поведение?
Т.е. выполнение OnCreate каждый раз при выходе из меню это нормально или нет?
Re: Урок 71. Preferences как настройки приложения. Preferenc
Есть PreferenceActivity из которой честно вызывается из preferences.xml набор настроек. Все там отлично меняется, но хочется при возврате в экрану PreferenceActivity отобразить сделанные настройки прямо в списке , например в опции Summary. Но вот беда .. На какое событие повесить setSummary ? Варианты c onResume не прокатывают, поскольку мы находимся в теле выполнения PreferenceActivity. Каким событием отловить выход из диалога изменения опции ?
Re: Урок 71. Preferences как настройки приложения. Preferenc
Я, когда с таким сталкивался, менял состояние вьюшек странице в onPreferenceChange.
Или я не правильно понял вопрос?
Или я не правильно понял вопрос?
Re: Урок 71. Preferences как настройки приложения. Preferenc
Здравствуйте. Делал по вашему примеру с onResume. С вашим примером понятно. Но у меня главное активити карта, на которую маркеры налаживаются с базы в интернете. В Настройках есть выбор радиуса показа точек. Так вот я делал по вашему примеру с onResume и получается [на реальном устройстве], что когда экран тухнет, то происходит onResume, если программу свернуть, то снова onResume, это как бы правильно, но постоянно идёт запрос с базу. Подскажите, пожалуйста, как сделать, чтоб изменение настроек применялось только после их изменения? А не при изменении фокуса.
Код активити с настройками:
Код активити с настройками:
Код: Выделить всё
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
public class ActivityPref extends PreferenceActivity{
ListPreference prefList, prefList2;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
prefList = (ListPreference) findPreference("prefOne");
prefList.setDefaultValue(prefList.getEntryValues()[1]);
String ss = prefList.getValue();
if (ss == null) {
prefList.setValue((String)prefList.getEntryValues()[1]);
ss = prefList.getValue();
}
prefList.setSummary(prefList.getEntries()[prefList.findIndexOfValue(ss)]);
prefList.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
prefList.setSummary(prefList.getEntries()[prefList.findIndexOfValue(newValue.toString())]);
return true;
}
});
prefList2 = (ListPreference) findPreference("prefTwo");
prefList2.setDefaultValue(prefList2.getEntryValues()[2]);
String ss2 = prefList2.getValue();
if (ss2 == null) {
prefList2.setValue((String)prefList2.getEntryValues()[2]);
ss2 = prefList2.getValue();
}
prefList2.setSummary(prefList2.getEntries()[prefList2.findIndexOfValue(ss2)]);
prefList2.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
prefList2.setSummary(prefList2.getEntries()[prefList2.findIndexOfValue(newValue.toString())]);
return true;
}
});
}
}
Re: Урок 71. Preferences как настройки приложения. Preferenc
Ребят, андроид генерирует сам окно настроек(Добавить Android activity > Settings activity). Так во там можно заметить, что метод addPreferencesFromResource(R.xml.pref); вызывается не в onCreate(),а в onPostCreate()
Кто-нибудь разбирался в этом? Из некоторых объяснений выходит, что метод обрабатывается после onCreate() ,но до onResume(). Может он лучше подходит, чем "восстановление"?
Кто-нибудь разбирался в этом? Из некоторых объяснений выходит, что метод обрабатывается после onCreate() ,но до onResume(). Может он лучше подходит, чем "восстановление"?
Из описания ясно, что метод более для системы. А зачем же тогда он его генерирует? Как-то не понятно.Called when activity start-up is complete (after onStart() and onRestoreInstanceState(Bundle) have been called). Applications will generally not implement this method; it is intended for system classes to do final initialization after application code has run.
Re: Урок 71. Preferences как настройки приложения. Preferenc
Еще один вопрос. Если нажать кнопку вернуться с настроек, то главный активити просто получает фокус. А если тапнуть по стрелке наверху у названия, то главный активити вызывает метод Создать, и все сбрасывается. Как поправить?
UPDATE 1: Сам себе и отвечу
Идея в том, что если были изменены настройки, пересоздаем главный активити, а если не были, просто возвращаемся назад. Для этого только осталось добавить флаг, проверку и действия.
UPDATE 1: Сам себе и отвечу
Код: Выделить всё
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish(); //завершаем данный активити
return true; //не посылаем событие дальше
}
return super.onOptionsItemSelected(item);
}
Re: Урок 71. Preferences как настройки приложения. Preferenc
Добрый день!
Подскажите, пожалуйста, по следующему вопросу:
- есть у приложения список настроек;
- при установке и запуске приложения - оно вылетает при попытке зайти в главное активити. Но! Если перед входом в главное активити зайти в настройки и "потыкать" там, то после этого приложение не вылетает.
Есть такое ощущение, что необходим метод, который при запуске главного активити, должен пройтись по настройкам и считать их.
Подскажите, пожалуйста, есть ли такой метод или надо этот вопрос решать по другому как-то?
Заранее спасибо!
Вот как я использую настройки:
Подскажите, пожалуйста, по следующему вопросу:
- есть у приложения список настроек;
- при установке и запуске приложения - оно вылетает при попытке зайти в главное активити. Но! Если перед входом в главное активити зайти в настройки и "потыкать" там, то после этого приложение не вылетает.
Есть такое ощущение, что необходим метод, который при запуске главного активити, должен пройтись по настройкам и считать их.
Подскажите, пожалуйста, есть ли такой метод или надо этот вопрос решать по другому как-то?
Заранее спасибо!
Вот как я использую настройки:
Код: Выделить всё
sp = PreferenceManager.getDefaultSharedPreferences(this);
protected void onResume() {
listValue = sp.getString("list", "не выбрано");
Log.d(LOG_TAG, "значение List = " + listValue);
listValueInt = Integer.parseInt(listValue);
Log.d(LOG_TAG, "значение ListInt = " + listValueInt);
listValueCount = sp.getString("list2", "не выбрано");
Log.d(LOG_TAG, "значение listValueCount = " + listValueCount);
listValueIntCount = Integer.parseInt(listValueCount);
Log.d(LOG_TAG, "значение listValueIntCount = " + listValueIntCount);
listValueText = sp.getString("list3", "не выбрано");
Log.d(LOG_TAG, "значение listValueText = " + listValueText);
listValueIntText = Integer.parseInt(listValueText);
Log.d(LOG_TAG, "значение listValueIntText = " + listValueIntText);
super.onResume();
}
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 71. Preferences как настройки приложения. Preferenc
Дайте лог с ошибкой.
Последний раз редактировалось Mikhail_dev 19 дек 2013, 17:00, всего редактировалось 1 раз.
Re: Урок 71. Preferences как настройки приложения. Preferenc
Что именно дать с ошибкой?no-- писал(а):Дайте с ошибкой.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 71. Preferences как настройки приложения. Preferenc
блин, лог проглотил. Лог дайте с ошибкой =)