110

次の方法を使用して、(NavigationDrawer 内の) Fragments を表示/非表示に切り替えます。

protected void showFragment(int container, Fragment fragment, String tag, String lastTag, boolean addToBackStack ) {

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();

        if ( lastTag != null && !lastTag.equals("")) {
            Fragment lastFragment = fragmentManager.findFragmentByTag( lastTag );
            if ( lastFragment != null ) {
                transaction.hide( lastFragment );
            }
        }

        if ( fragment.isAdded() ) {
            transaction.show( fragment );
        }
        else {
            transaction.add( container, fragment, tag );
        }

        if ( addToBackStack ) {
            transaction.addToBackStack( tag );
        }

        transaction.commit();

        // set the active tag
        activeFragTag = tag;
    }

Fragmentsライフサイクルを表示または非表示にするときに呼び出されるメソッドはどれですか? (onShow()やonHide()などのメソッドがないため、何を使用すればよいかわかりません)。特定の Fragment を表示および非表示にするときに特定のアクションを実行したい。

4

11 に答える 11

76

このメソッドを @Override して問題を解決します。

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    if (hidden) {
        //do when hidden
    } else {
       //do when show
    }
}
于 2013-12-24T05:39:10.643 に答える
1

これだけが私のために働いた!! 現在は廃止されてsetUserVisibleHint(...)います(最後にドキュメントを添付しました)。これは、他のいくつかの回答が廃止されていることを意味します;-)

public class FragmentFirewall extends Fragment {
    /**
     * Required cause "setMenuVisibility(...)" is not guaranteed to be,
     * called after "onResume()" and/or "onCreateView(...)" method.
     */
    protected void didVisibilityChange() {
        Activity activity = getActivity();
        if (isResumed() && isMenuVisible()) {
            // Once resumed and menu is visible,
            // at last our Fragment is really visible to user.
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        didVisibilityChange();
    }

    @Override
    public void setMenuVisibility(boolean visible) {
        super.setMenuVisibility(visible);
        didVisibilityChange();
    }
}

テスト済みで、動作するNaviagationDrawerこともあり、isMenuVisible()常に戻りますtrue(onResume()十分に思えますが、サポートViewPagerも行いたいと考えています)。

setUserVisibleHint廃止されました。このメソッドをオーバーライドする場合、渡すときに実装される動作trueは に移動しFragment.onResume()、渡すときに実装される動作falseは に移動する必要がありますFragment.onPause()

于 2020-07-28T06:45:11.757 に答える