Android: невозможно заменить создание фрагмента в методе активности onCreate()

У меня проблемы с изучением фрагментов Android. В моем приложении у меня есть одно действие с 3 фрагментами. Каждый фрагмент должен заменить предыдущий после некоторого действия пользователя. Мой основной макет xml - это простой FrameLayout с идентификатором «контейнер». Что я делаю в методе MainActivity onCreate(), так это добавляю фрагмент по умолчанию в контейнер:

public class HolderActivity extends ActionBarActivity {

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

        FragmentList listFragment = new FragmentList();

        // Add the fragment to the 'container'
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, listFragment).commit();  

Начальный экран работает нормально. Затем я добавляю другой фрагмент, основанный на нажатии кнопки:

        // Go to settings fragment
        FragmentSettings mFragmentSettings = new FragmentSettings();
        getFragmentManager().beginTransaction().replace(R.id.container, mFragmentSettings).commit();

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

РЕДАКТИРОВАТЬ: когда я пытаюсь использовать getSupportFragmentManager() в моем методе onOptionsItemSelected следующим образом:

@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();
    if (id == R.id.action_settings) {

        // Go to settings fragment
        FragmentSettings mFragmentSettings = new FragmentSettings();

        getFragmentManager().beginTransaction()
            .replace(R.id.container, mFragmentSettings).commit();

    }
    return super.onOptionsItemSelected(item);
}

Я получаю эту ошибку: "Метод replace(int, Fragment) в типе FragmentTransaction неприменим для аргументов (int, FragmentSettings)"


person alv_721    schedule 16.11.2014    source источник


Ответы (1)


Почему вы используете supportFragmentManager, а затем обычный FragmentManager?

getSupportFragmentManager() и getFragmentManager().

Если вы используете ActionBarActivity, используйте поддержку. Если Activity то обычный.

person Simas    schedule 16.11.2014
comment
Я использую второй метод (заменить) в методе onOptionsItemSelected(MenuItem item) {. И когда я вызываю getSupportFragmentManager, я получаю сообщение об ошибке replace о том, что это неприменимо с этими аргументами. - person alv_721; 16.11.2014
comment
@Vla Опубликуйте код, который вы использовали, и полное сообщение об ошибке. - person Simas; 16.11.2014
comment
Обновил мой пост с подробностями - person alv_721; 16.11.2014
comment
Класс @Vla FragmentSettings должен расширять Fragment или любой из его производных классов. - person Simas; 16.11.2014
comment
My FragmentSettings расширяет PreferenceFragment - person alv_721; 16.11.2014
comment
@Vla, это потому, что PreferenceFragment расширяет android.app.Fragment. supportFragmentManager ожидает android.support.v4.app.Fragment. Либо переключитесь на использование обычного менеджера фрагментов, либо используйте что-то другое, кроме PreferenceFragment. - person Simas; 16.11.2014
comment
Теперь я понял это полностью :) Большое спасибо, теперь это работает! - person alv_721; 16.11.2014