次の方法を使用して、フラグメントを表示/非表示にして(NavigationDrawerで)フラグメントを切り替えています。
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;
}
表示または非表示にしたときに、フラグメントライフサイクルのどのメソッドが呼び出されるのかがわかりません。(onShow()やonHide()などのメソッドがないため、何を使用すればよいかよくわかりません)。特定のフラグメントを表示および非表示にしたときに特定のアクションを実行したいと思います。
アクティビティのライフサイクルと同様に、Androidはフラグメントが表示されるとonStart()を呼び出します。onStop()
通常、フラグメントが非表示になったときに呼び出されますが、後で呼び出すこともできます。
レイアウトによってonStart()
は、フラグメントがまだ表示されていない場合でもAndroidが呼び出すことができますが、フラグメントは表示されている親コンテナに属しています。たとえば、これはメソッドandroid.support.v4.view.ViewPager
をオーバーライドする必要がある場合に有効ですFragment.setUserVisibleHint()
。いずれにせよ、BroadcastReceiversまたは他のリスナーを登録/登録解除する必要がある場合、それらは常に呼び出されるためonStart()
、onStop()
メソッドを安全に使用できます。
注:一部のフラグメントコンテナーは、非表示のフラグメントを開始したままにすることができます。この状況を処理するには、をオーバーライドできますFragment.onHiddenChanged(boolean hidden)
。ドキュメントによると、フラグメントをユーザーに表示するには、フラグメントを開始して表示する(非表示にしない)必要があります。
更新:を使用するandroid.support.v4.widget.DrawerLayout
と、ドロワーが開いている場合でも、ドロワーの下のフラグメントが開始され、表示されたままになります。この場合、コールバックを使用DrawerLayout.setDrawerListener()
してリッスンする必要がonDrawerClosed()
ありonDrawerOpened()
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加