Нажатие на экран настроек не прикрепляет фрагмент настроек

У меня есть действие настроек с ListPreference и PreferenceScreen. Эти два предпочтения загружаются с использованием PreferenceFragment. При щелчке PreferenceScreen второй PreferenceFragment, содержащий список других PreferenceFragment, заменяет первый PreferenceFragment. Второй фрагмент правильно загружен, но не привязан к активности. Когда я нажимаю кнопку «Назад», второй фрагмент правильно отображается в рамках действия, что является желаемым действием, но достигается после нажатия кнопки «Назад», а не после нажатия PreferenceScreen.

Вот код SettingsActivity:

public class SettingsActivity extends Activity {

private static String TAG = "SettingsActivity";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getActionBar().setDisplayShowTitleEnabled(false);
    getActionBar().setDisplayShowHomeEnabled(false);

    setContentView(R.layout.settings);
    Log.i(TAG, "SettingsActivity called");

    if(findViewById(R.id.fragment_container) != null) {
        if(savedInstanceState != null) {
            return;
        }
        getFragmentManager().beginTransaction().add(R.id.fragment_container, 
                new SettingsFragment()).commit();
    }
}




public static class SettingsFragment extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings_preference);  



        PreferenceScreen ps = (PreferenceScreen) getPreferenceManager().findPreference("nots");
        ps.setOnPreferenceClickListener(new OnPreferenceClickListener() {

            @Override
            public boolean onPreferenceClick(Preference preference) {
                SettingsFragment1 sf1 = new SettingsFragment1();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.replace(R.id.fragment_container, sf1);
                transaction.addToBackStack(null);
                //transaction.attach(sf1); this proved to be redundant
                transaction.commit();
                return true;
            }
        });
    }       
}


public static class SettingsFragment1 extends PreferenceFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settings1_preference); 

    }
}

}

Что может быть не так? заранее спасибо


person Nick    schedule 12.03.2015    source источник


Ответы (1)


Проблема была в том, что в файле preference.xml тег PreferenceScreen был полностью развернут с другими настройками, теми, которые должны были быть загружены со вторым фрагментом настройки. Таким образом, нажав на PreferenceScreen, последний был загружен со своими настройками, как будто он не был размещен во фрагменте. Я просто удалил настройки под PreferenceScreen и оставил их самостоятельно.

Странно, что решение проблемы может прийти само собой, как только вы его сформулируете.

person Nick    schedule 14.03.2015