Можно ли использовать PreferenceActivity с SQLite вместо res / xml? - PullRequest
3 голосов
/ 21 сентября 2011

Прелесть PreferenceActivity заключается в его тесной интеграции с Android res/xml. Все, что вам нужно для достижения волшебства самостоятельного чтения / сохранения предпочтений, вместе с пользовательским интерфейсом, это определить:

public class MyPreferenceActivity extends PreferenceActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);
  }
}

И определите любую <PreferenceScreen> необходимую вам структуру в XML-файле (ах).

Но в этом и заключается его слабость: он настолько тесно интегрирован, что я понятия не имею, возможно ли использовать PreferenceActivity с SQLite (для более структурированного управления предпочтениями), без повторного придумывать время (т.е. переписывать всю «PreferenceActivity» с нуля).

Например, использование OnSharedPreferenceChangeListener может обеспечить шлюз для использования PreferenceActivity с SQLite, но для этого все еще требуется наличие определений res/xml, поэтому на самом деле мы все еще ограничены ограничениями метода res / xml .

Есть ли способ "съесть пирог и тоже есть"? то есть используйте PreferenceActivity с SQLite так же легко, как с res/xml.

1 Ответ

3 голосов
/ 21 сентября 2011

Интересный вопрос.

Краткий ответ: AFAIK, вы не можете использовать SQLite с PreferenceActivity без значительных настроек, поскольку он не предназначен для такой работы.

Дело в томвот почему вам на самом деле нужен SQLite для управления настройками?SQLite как правило никогда не следует использовать для меньших данных, которыми можно управлять, не требуя реляционной структуры.Для примера, имеет смысл использовать SQLite, когда у вас есть несколько экземпляров похожих данных, таких как строки в таблице.

В случае предпочтений я не могу представить такие экземпляры.Более того, SQLite поражает производительность приложения по сравнению с SP.Сделайте правильный выбор.

Обновление: Если у вас есть несколько предпочтений, как в вопросе, упомянутом выше, вы можете использовать комбинацию SQLite и SP.Вы не можете заменить SP на SQLite наверняка.Что можно сделать, так это то, что вам нужно сохранить уникальный ключ, который станет первичным ключом таблицы, а затем в onPause PreferenceActivity вам нужно запустить запрос вставки / обновления в таблице SQLite.Вы должны быть осторожны и убедиться, что отображается правильный SP, и, следовательно, в onResume of PreferenceActivity вам нужно запускать запрос выборки с уникальным ключом и соответственно устанавливать SP.

...