Phi*_*oda 95 lifecycle android android-fragments fragmenttransaction
我使用以下方法通过显示/隐藏它们来切换片段(在我的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;
}
Run Code Online (Sandbox Code Playgroud)
我不清楚的是当我显示或隐藏它时,会调用Fragments生命周期的哪个方法?(因为没有像onShow()或onHide()这样的方法,我不太清楚要使用什么).我想在显示和隐藏某个片段时执行特定操作.
ser*_*nka 112
与活动生命周期类似,当片段变为可见时,Android会调用onStart().onStop()通常在片段变为不可见时调用,但也可以在以后调用.
根据您的布局onStart(),当您的Fragment尚未显示时,Android可以调用,但它属于可见的父容器.例如,这有效android.support.v4.view.ViewPager,需要您覆盖Fragment.setUserVisibleHint()方法.在任何情况下,如果您需要注册/取消注册BroadcastReceivers或其他侦听器,您可以安全地使用onStart()和onStop()方法,因为它们将始终被调用.
注意:某些片段容器可以保持不可见的片段启动.要处理这种情况,您可以覆盖Fragment.onHiddenChanged(boolean hidden).根据文档,片段必须同时启动和可见(不隐藏),以便用户可见.
更新:如果您使用,android.support.v4.widget.DrawerLayout则抽屉下方的片段保持开始并且即使在抽屉打开时也可见.在这种情况下,您需要使用DrawerLayout.setDrawerListener()和监听onDrawerClosed()和onDrawerOpened()回调.
小智 60
我@Override这个方法并解决了我的问题:
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (hidden) {
//do when hidden
} else {
//do when show
}
}
Run Code Online (Sandbox Code Playgroud)
Bir*_*dia 35
当然你可以@Overriede以下方法来做到这一点:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// Do your Work
} else {
// Do your Work
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用“onCreateView”(或“onActivityCreated”)和“onHiddenChanged”。第一次显示时使用“onCreateView”,稍后显示时使用“onHiddenChanged”。事务控制时不会调用“setMenuVisibility”。
@Override
public View OnCreateView() {
// fragment will show first
}
@Override
public void onHiddenChanged(boolean hidden) {
if (!hidden) {
// fragment will show
}
else {
// fragment will hide
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67154 次 |
| 最近记录: |