Пакетът изчезва от фрагмент след ангажиране?

Имам дейност, чиято единствена цел е да хоствам фрагмент. Започвам тази дейност с намерение, след което използвам информация от намерението, за да добавя аргументи към фрагмент, който бих искал да добавя към новата дейност.

Ето onCreate в SingleClickerActivity (тази дейност се стартира от намерението). Когато преминавах през това, проверих дали фрагментът има аргумента, който искам да изпратя. Фрагментът има аргумент (това е точно преди стъпката на транзакцията)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(getLayoutResId());

    UUID clickerId = (UUID) getIntent().getSerializableExtra(EXTRA_CLICKER_ID);
    FragmentManager fm = getSupportFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.fragment_container);

    if (fragment == null) {
        fragment = createFragment(clickerId);
        fm.beginTransaction()
                .add(R.id.fragment_container, fragment)
                .commit();
    }
}

Направих фрагмента, той има пакета args и го ангажирам. Въпреки това, когато стигна до onCreate на фрагмента:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mClickerId = (UUID) getArguments().getSerializable(ARG_CLICKER_ID);
    mClicker = ClickerBox.get(getActivity()).getClicker(mClickerId);
}

getArguments() връща нула. Пакетът е пуфнал. Къде се губи?


person zsobel    schedule 11.06.2016    source източник


Отговори (1)


Решено!

Методът onCreate извика своя super, който създаде друг фрагмент без аргументи. Получавах два фрагмента, един с аргументи и един без. Празният беше този, който се привързваше към дейността. Извадих onCreate в SingleClickerActivity, за да използвам наследената версия, след което преместих реда UUID clickerId = (UUID) getIntent().getSerializableExtra(EXTRA_CLICKER_ID); into createFragment().

person zsobel    schedule 12.06.2016