У меня есть эта неприятная проблема, которую я не знаю, как ее решить. Проблема очень проста:Проблема с фрагментацией (несколько экземпляров)
У меня есть FragmentA
, который нажимает кнопку FragmentB
(a ListView
). В FragmentB
Я могу нажать FragmentA
с OnItemClick
. Итак, вы видите, глубина бесконечна.
Проблема заключается в том, когда я нажал FragmentB
во второй раз, а затем вернуться (в 2 раза) в первую очередь из FragmentB
у меня есть элементы из первой и второй инстанции в ListView
. Если бы я собирался сделать 10 экземпляров, тогда у меня были бы предметы из всех 10 экземпляров в моем первом экземпляре.
Может ли кто-нибудь объяснить проблему и предоставить мне решение?
EDIT (фрагмент кода):
FollowersFragment frag = new FollowersFragment();
Bundle bundle = new Bundle();
bundle.putString(Constants.USER_ID, userId);
frag.setArguments(bundle);
((MainActivity) getActivity()).pushFragment(frag);
public void pushFragment(TrigdFragment fragment) {
pushFragment(fragment, new AnimationObject());
}
public void pushFragment(TrigdFragment fragment, AnimationObject animate) {
switchContent(fragment, animate, false);
}
public void switchContent(TrigdFragment fragment, AnimationObject anim,
boolean clearBackStack) {
ActionBarHelper mActionBarHelper = ActionBarHelper.getInstance();
supportInvalidateOptionsMenu();
FragmentManager mgr = getSupportFragmentManager();
if (clearBackStack) {
mActionBarHelper.setDisplayHomeAsDrawerEnabled(true);
mgr.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
} else {
mActionBarHelper.setDisplayHomeAsUpEnabled(true);
}
fragment.setupActionBar(getResources());
FragmentTransaction ft = mgr.beginTransaction();
boolean doingAnimation = false;
if (Util.hasIcecreamSandwich()) {
doingAnimation = anim != null;
if (doingAnimation) {
ft.setCustomAnimations(anim.enterResource, anim.exitResource,
anim.popEnterResource, anim.popExitResource);
}
}
ft.replace(R.id.content_frame, fragment, "current");
if (!clearBackStack) {
ft.addToBackStack(null);
}
ft.commitAllowingStateLoss();
if (Util.hasIcecreamSandwich()) {
if (doingAnimation) {
// This can't be done immediately because the transaction may
// not
// yet be committed. Commits are are posted to the main
// thread's message loop.
mHandler.post(new Runnable() {
@SuppressLint("NewApi")
@Override
public void run() {
invalidateOptionsMenu();
}
});
}
}
}
сколько у вас фрагментов .... ??? – SilentKiller
У меня есть эти два, FragmentA и Fragment B. Но они могут начинать каждую другую (круговую). – Carnal
* Итак, вы видите, что глубина бесконечна. * - если вы каждый раз используете новые экземпляры. Но вы можете переключаться между двумя экземплярами этих фрагментов и избегать проблем. * У меня есть элементы из первого и второго экземпляров в ListView * - у вас есть какие-то случайные данные в этом фрагменте? – Luksprog