При первом запуске моего приложения для Android я вызываю фрагмент предпочтений, потому что пользователю нужно сначала сделать выбор из списка элементов, и их выбор необходимо сохранить. Я расширяю ListPreference для отображения списка элементов.
Как это должно работать, пользователь выбирает элемент из представленного списка. Этот выбор сохраняется в SharedPreferences, и приложение переходит к другому фрагменту. Все это работает, но по какой-то причине ListPrefence отображается во второй раз.
Я внес некоторые записи в журнал и обнаружил, что по какой-то причине создаются два объекта ListPreference... но я знаю только один вызов для его создания. Мне почему-то не хватает, где/почему конструктор ListPreference вызывается во второй раз.
Мой код PreferenceFragment прост. Это выглядит как
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("INIT", "ONCREATE");
addPreferencesFromResource(R.xml.inititems); // load from XML
Есть только вызов addPreferencesFromResource(). Никакое другое место в моем коде фрагмента не должно (насколько я понимаю) вызывать создание экземпляра ListPreference, но ведение журнала говорит мне, что конструктор ListPreference вызывается дважды, а onCreate фрагмента вызывается только один раз.
Я собираюсь попытаться выполнить трассировку стека из конструктора ListPreference, но я хотел узнать, есть ли у кого-нибудь мысли или предложения помимо трассировки стека. Почему конструктор вызывается дважды?
Спасибо! -март
getFragmentManager().beginTransaction() .add(R.id.container, new InitAFragment(), "InitAFragment").commit();
, затем в onCreate фрагмента я вызываюaddPreferencesFromResource(R.xml.inititems)
- person Marlonez   schedule 04.01.2015