Урок 72. Preferences. Список, экраны и категории
Урок 72. Preferences. Список, экраны и категории
В этом уроке:
- используем в настройках список
- группируем настройки по экранам и категориям
Click here to read this article!
- используем в настройках список
- группируем настройки по экранам и категориям
Click here to read this article!
Последний раз редактировалось damager82 19 май 2017, 10:15, всего редактировалось 4 раза.
Re: Урок 72. Preferences. Список, экраны и категории
Доброго времени суток.
Когда я нажимаю на ListPreference на экран выходит список. Какие методы при этом вызываются? Я так понимаю что Activity в onPause не уходит. Мне интересен метод вызываемый при выборе элемента из списка.
Когда я нажимаю на ListPreference на экран выходит список. Какие методы при этом вызываются? Я так понимаю что Activity в onPause не уходит. Мне интересен метод вызываемый при выборе элемента из списка.
Re: Урок 72. Preferences. Список, экраны и категории
Ладно. Тогда может кто подскажет как обработать выбор в ListPreference и нажатие кнопки в EditPreference?
Re: Урок 72. Preferences. Список, экраны и категории
нашел альтернативное решение. Использовал OnPreferenceChangeListener.
Re: Урок 72. Preferences. Список, экраны и категории
Ребята, вы пробовали запускать это на андроид 2.2 ? Почему-то весь экран начинает толи путаться в теме оформления, толи еще в чем-то.. по умолчанию тема светлая android:Theme.Light, но в PrefActivity на странице Screen экран становится черным, а когда трогаешь экран пальцем, чекбоксы становятся светлыми.
Re: Урок 72. Preferences. Список, экраны и категории
Очень может быть. У меня на Galaxy Tab 10.1 с Android 3.2 похожие баги наблюдались при запуске PreferenceFragment c PreferenceScreen-ами.gera писал(а):Ребята, вы пробовали запускать это на андроид 2.2 ? Почему-то весь экран начинает толи путаться в теме оформления, толи еще в чем-то.. по умолчанию тема светлая android:Theme.Light, но в PrefActivity на странице Screen экран становится черным, а когда трогаешь экран пальцем, чекбоксы становятся светлыми.
Re: Урок 72. Preferences. Список, экраны и категории
Тут пример со статическим списком, а как отображать динамический список? Чтоб также мог добавлять значения в массив. Например отображать последние файлы, которые были открыты программой.
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
Re: Урок 72. Preferences. Список, экраны и категории
Посмотрите здесь viewtopic.php?f=3&t=123&p=6421#p6421elron писал(а):Тут пример со статическим списком, а как отображать динамический список? Чтоб также мог добавлять значения в массив. Например отображать последние файлы, которые были открыты программой.
Re: Урок 72. Preferences. Список, экраны и категории
а как показать не нижний уровень настроек, а конкретный PreferenceScreen?
Re: Урок 72. Preferences. Список, экраны и категории
В xml-файле добавляете PreferenceScreen(по сути просто кнопка)Vlady писал(а):а как показать не нижний уровень настроек, а конкретный PreferenceScreen?
Код: Выделить всё
<PreferenceScreen
android:key="key"
android:title="title"
android:summary="summary" >
</PreferenceScreen>
Код: Выделить всё
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
Log.d("myLog", "onPreferenceTreeClick " + preference.getKey());
if (preference.getKey().contains("key")){ } }
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
Re: Урок 72. Preferences. Список, экраны и категории
Интересную вещь заметил: если мы выбрали какую-то настройку через список, то при открытии списка (для обновления значения) выбранный ранее пункт будет выделен (я сначала полагал, что этот текущий установленный пункт определялся по соответствующему значению настройки в SharedPreferences). Но вот если удалить настройки (через edit().clear().commit()), то выделенный пункт не снимается, как ни крути, даже не помогает обновление списка значений через setEntries и setEntryValues (надеялся, что там есть какой-нибудь SelectedItem и его можно скинуть вручную).
То есть, чтобы скинуть этот пункт, остаётся только пересоздавать этот ListPreference?
То есть, чтобы скинуть этот пункт, остаётся только пересоздавать этот ListPreference?
Re: Урок 72. Preferences. Список, экраны и категории
решено
Не могу понять, простой список не запоминает свое значение, точнее запоминает, но через раз.
(... - тут был код, но это неважно)
так вот, Log выводит пункты почти всегда не те что я отметил, а ранее отмеченные. Захожу в настройки вновь - там опять старое значение. На второй раз может и сработать. А может и не сработать. Последовательность не совпадает с тем, как я их выделяю. Что такое, в чем дело?
UPD чекбоксов это тоже касается.
UPD1 У меня параллельно в сервисе раз в секунду могут забираться настройки через
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
может быть, это мешает окну настроек брать и обновлять?
UPD final - да, сервису надо запрещать проверять настройки, пока открыто окно настроек. Кошмар. Пришлось запрещать ему бродкастом. Теперь все работает
Не могу понять, простой список не запоминает свое значение, точнее запоминает, но через раз.
(... - тут был код, но это неважно)
так вот, Log выводит пункты почти всегда не те что я отметил, а ранее отмеченные. Захожу в настройки вновь - там опять старое значение. На второй раз может и сработать. А может и не сработать. Последовательность не совпадает с тем, как я их выделяю. Что такое, в чем дело?
UPD чекбоксов это тоже касается.
UPD1 У меня параллельно в сервисе раз в секунду могут забираться настройки через
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
может быть, это мешает окну настроек брать и обновлять?
UPD final - да, сервису надо запрещать проверять настройки, пока открыто окно настроек. Кошмар. Пришлось запрещать ему бродкастом. Теперь все работает
Re: Урок 72. Preferences. Список, экраны и категории
У меня есть вопрос, как сменить фон основного экрана настроек?
Я нашел вариант с созданием своей темы оформления вот так:
Но в таком случае картинка устанавливается как для основного экрана настроек, так и для диалога с радиобатонами от ListPreference.
UPD: Все, я разобрался, сам тупанул, накидал лишних тегов.
Я нашел вариант с созданием своей темы оформления вот так:
Код: Выделить всё
<style name="PrefsTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">@drawable/prefs_bg</item>
<item name="android:textColor">@color/prefs_bg</item>
<item name="android:listViewStyle">@style/listViewPrefs</item>
</style>
<style name="listViewPrefs" parent="@android:style/Widget.ListView">
<item name="android:background">@drawable/prefs_bg</item>
<item name="android:cacheColorHint">@color/prefs_bg</item>
<item name="android:textColor">@color/text_color</item>
</style>
UPD: Все, я разобрался, сам тупанул, накидал лишних тегов.
Re: Урок 72. Preferences. Список, экраны и категории
Если кратко, то столкнулась с подобной проблемой, как у djdance. Только нет у меня сервиса, который ежесекундно "просит" настройки.. а проявления те же - с первого раза "кликания" по пункту списка настроек (listPreference) лог сообщает что всё ещё выбран прошлый пункт списка, и только после второго клика приложение наконец-то "понимает", какой пункт действительно был выбран..
Если немного подробней, то суть приложение в том, чтобы запустить слушателя статуса телефонных звонков (PhoneStateListener), так что активити я запускаю только для того чтобы юзер мог кликнуть в пункте меню и выбрать включить или же выключить слушателя. Для этого у меня есть ещё одно активити - "контейнер" для PreferenceFragment, в котором я отслеживаю изменения в listreference
Не знаю, может ошибка в чём-то очень очевидном, но что-то серфинг по инету на этот раз не даёт ответа Подскажите пожалуйста в чём может причина такого поведения
Если немного подробней, то суть приложение в том, чтобы запустить слушателя статуса телефонных звонков (PhoneStateListener), так что активити я запускаю только для того чтобы юзер мог кликнуть в пункте меню и выбрать включить или же выключить слушателя. Для этого у меня есть ещё одно активити - "контейнер" для PreferenceFragment, в котором я отслеживаю изменения в listreference
Код: Выделить всё
ListPreference listPreference = (ListPreference) findPreference("list");
listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference, Object newValue) {
ListPreference listPref = (ListPreference) preference;
String userC = listPref.getValue();
Log.d(LOG, "Settingfragment, onCreate, userChoice = " + userC);
SharedPreferences settings = getActivity().getSharedPreferences("preferences", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString("list", userC);
editor.commit();
return true;
}
});
Re: Урок 72. Preferences. Список, экраны и категории
Я дочиталась в документации в чём была проблема - "Sets the callback to be invoked when this Preference is changed by the user (but before the internal state has been updated).", т.е. колбек "приходит" когда настройка изменяется НО ДО РЕАЛЬНОГО ИЗМЕНЕНИЯ В СИСТЕМЕ
-
- Сообщения: 4
- Зарегистрирован: 28 сен 2015, 11:53
Re: Урок 72. Preferences. Список, экраны и категории
Метод addPreferencesFromResource усталел и с Android Studio код MainActivity можно переписать так:
Используем пунк меню, который создает IDE по умолчанию и загружаем найстройки опять таки уже созданной функцией запукая Intent
Код: Выделить всё
package ua.com.webtuning.startandroid;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView tvInfo;
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvInfo = (TextView) findViewById(R.id.tvInfo);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
protected void onResume() {
String listValue = sharedPreferences.getString("list", "не выбрано");
tvInfo.setText("List value = " + listValue);
super.onResume();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
startActivity(new Intent(this, PrefActivity.class));
return true;
}
return super.onOptionsItemSelected(item);
}
}
Re: Урок 72. Preferences. Список, экраны и категории
Сделал всё по уроку, при нажатии "Menu" - "Preferences" ничего не происходит, не появляется окно с настройками.
Пример с 71 урока выполнил, запустил, всё нормально работает. А этот почему-то не работает. Не перепечатывал, скопипастил.
Android Studio 1.5.1.
Может кто сталкивался?
Пример с 71 урока выполнил, запустил, всё нормально работает. А этот почему-то не работает. Не перепечатывал, скопипастил.
Android Studio 1.5.1.
Может кто сталкивался?
-
- Сообщения: 1
- Зарегистрирован: 14 окт 2016, 10:54
Re: Урок 72. Preferences. Список, экраны и категории
Похожая ситуация. Что в этом, что в 71-м уроке. Сначала не было меню. Совсем. Белый экран с TextView. С помощью предыдущих уроков и гугла вроде получил что нужно. Но окно настроек тоже не вызывается. Android Studio 2.1.3. Api 24. Запускал на реальном устройстве с 6.0.1 на бортуAABL писал(а):Сделал всё по уроку, при нажатии "Menu" - "Preferences" ничего не происходит, не появляется окно с настройками.
Пример с 71 урока выполнил, запустил, всё нормально работает. А этот почему-то не работает. Не перепечатывал, скопипастил.
Android Studio 1.5.1.
Может кто сталкивался?
up
Методом научного тыка удалось починить)
В манифесте строки android:theme="@style/AppTheme" и android:theme="@style/AppTheme.NoActionBar" удаляем. В xml устанавливаем тему DarkActionBar (проверил лично) или подобную.
Может кому будет полезен мой опыт)
Re: Урок 72. Preferences. Список, экраны и категории
Поясните, пожалуйста, почему такой код работает (сделал в одном проекте уроки 71 и 72).
В данном случае создается меню с 2мя строчками и на каждую вешается свой интент.
И я не понимаю поему это работает.
Мне кажется, что раз метод setIntent применяется к одному объекту menuItem дважды, то по идее к обоим пунктам должен бы прицепиться интент, установленный в последней строчке.
Код: Выделить всё
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem menuItem = menu.add(0,1,0,"Preferences");
menuItem.setIntent(new Intent(this,PrefActivity.class));
menuItem = menu.add(0,2,1,"Preferences2");
menuItem.setIntent(new Intent(this, Pref2Activity.class));
return super.onCreateOptionsMenu(menu);
}
И я не понимаю поему это работает.
Мне кажется, что раз метод setIntent применяется к одному объекту menuItem дважды, то по идее к обоим пунктам должен бы прицепиться интент, установленный в последней строчке.
-
- Сообщения: 2
- Зарегистрирован: 08 авг 2018, 07:26
Re: Урок 72. Preferences. Список, экраны и категории
Здравствуйте.
Уже третий день бьюсь с уроком. Дошло уже до того, что просто скопировал весь код в нужные файлы, скомпилировал и установил на устройство.
Кликаю по меню, появляется вкладка Preference, кликаю на вкладку и все, больше ничего не происходит. В чем может быть проблема?
Уже третий день бьюсь с уроком. Дошло уже до того, что просто скопировал весь код в нужные файлы, скомпилировал и установил на устройство.
Кликаю по меню, появляется вкладка Preference, кликаю на вкладку и все, больше ничего не происходит. В чем может быть проблема?