setPreferencesFromResource vs addPreferencesFromResource - PullRequest
1 голос
/ 25 марта 2020

Этот вопрос скорее академический c, чем процедурный. Мой экран настроек отображается и работает нормально, но, просматривая различные примеры правильной реализации AppCompatPreferenceActivity, я обнаружил, что люди по-разному обрабатывают загрузку ресурса настройки XML в своем примере кода.

Я использую только один простая настройка параметров, все в пределах одного PreferenceScreen и категории, но PreferenceFragmentCompat, по-видимому, все еще является наиболее подходящим и универсальным способом для go, оставляя дополнительные опции открытыми на будущее. Я могу добавить или не добавить дополнительные настройки и / или категории позже.

У меня такой вопрос, учитывая приведенные выше параметры, есть ли преимущества или недостатки в использовании одного вызова над другим (setPreferencesFromResource против addPreferencesFromResource).

Я пробовал оба:

public class PreferenceFragmentCustom extends PreferenceFragmentCompat
{
  @Override
  public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
  {    
    setPreferencesFromResource(R.xml.app_preferences, rootKey);
  }
}

и

public class PreferenceFragmentCustom extends PreferenceFragmentCompat
{
  @Override
  public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
  {
    addPreferencesFromResource(R.xml.app_preferences);
  }
}

, но, похоже, они оба работают одинаково (помните, я не обмениваю разные фрагменты предпочтений входить и выходить и может или не может быть в будущем).

Опять же, учитывая приведенные выше обстоятельства, я спрашиваю, есть ли какая-либо причина для выбора одного из способов загрузки ресурса настройки XML поверх другое (setPreferencesFromResource vs addPreferencesFromResource).

Заранее спасибо.

1 Ответ

0 голосов
/ 25 марта 2020

они делают разные вещи, посмотрите на документы

addPreferencesFromResource: раздувает данный ресурс XML, а добавляет иерархию предпочтений к текущей иерархии предпочтений.

setPreferencesFromResource: раздувает данный XML ресурс, а заменяет текущую иерархию предпочтений (если есть) на иерархию предпочтений с корнем в ключе.

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

если ваше приложение большое и имеет различные функции, каждая со своими настройками, тогда addPreferences может помочь вам не писать сразу все предпочтения xml, а позволить органически расширять каждую функцию, имеющую свою собственную предпочтение xml фрагмент

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

Если в вашем случае вы действительно не волнует, и у вас есть только один фрагмент предпочтений, я думаю, это действительно не имеет значения. Технически я полагаю, что setPreferences был бы «более правильным», но оба метода являются частью одной и той же библиотеки, и, как вы сказали, в некоторой степени их функциональность перекрывается, так что кого это волнует XD

...