2013-08-07 1 views
0

У меня есть эта неприятная проблема, которую я не знаю, как ее решить. Проблема очень проста:Проблема с фрагментацией (несколько экземпляров)

У меня есть 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(); 
       } 
      }); 
     } 
    } 
} 
+0

сколько у вас фрагментов .... ??? – SilentKiller

+0

У меня есть эти два, FragmentA и Fragment B. Но они могут начинать каждую другую (круговую). – Carnal

+0

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

ответ

0

Этот вопрос не имеет ничего общего с несколькими экземплярами. Это была Listener, которая предоставила проблему, мою ошибку. Спасибо за ваши усилия.

0

Вместо создания нового экземпляра фрагментов можно использовать replace функцию FragmentTransaction

transaction.replace(R.id.fragment_container, newFragment);

+0

Я уже использую этот! – Carnal

+0

@ Карнал все еще имеет проблемы .. ?? – SilentKiller

+0

Да, у меня еще есть пробник. – Carnal