0

解決方法がわからない、この厄介な問題があります。問題は非常に簡単です。

ボタンクリックで(a )FragmentAを押すものがあります。で押すことができます。ご覧のとおり、深さは無限です。FragmentBListViewFragmentBFragmentAOnItemClick

問題は、2 回目にプッシュFragmentBしてから (2 回) の最初のインスタンスに戻るFragmentBときListViewです。10 個のインスタンスを作成しようとすると、最初のインスタンスで 10 個すべてのインスタンスのアイテムが作成されます。

誰でも問題を説明できますか?解決策を教えてください。

編集 (コード スニペット):

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();
                }
            });
        }
    }
}
4

2 に答える 2

0

フラグメントの新しいインスタンスを作成する代わりに、次のreplace関数を使用できますFragmentTransaction

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

于 2013-08-07T12:27:08.010 に答える