大佬教程收集整理的这篇文章主要介绍了android – popBackStack导致一次又一次调用片段的oncreateView,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
public void addFragment(Fragment fragmenttoadd,String fragmentTag) { FragmentManager supportFragmentManager = getSupportFragmentManager(); Fragment activeFragment = getActiveFragment(); Fragmenttransaction fragmenttransaction = supportFragmentManager .begintransaction(); if (null != activeFragment) { fragmenttransaction.hide(activeFragment); } fragmenttransaction.replace(R.id.layout_child_activity,fragmenttoadd,fragmentTag); if (supportFragmentManager.getBACkStackEntryCount() > 1) { supportFragmentManager.popBACkStack(); } fragmenttransaction.addToBACkStack(fragmentTag); fragmenttransaction.commit(); }
if (supportFragmentManager.getBACkStackEntryCount() > 1) { supportFragmentManager.popBACkStack(); }
如果堆栈长度大于1,我使用pop来获取最新的片段.现在由于这个,当长度大于1时,它会一次又一次地调用onCreate视图.
喜欢 :
>打开A.
>开放B.
>打开C.(如果打开C. onCreateView的A被调用.)
http://developer.android.com/intl/es/guide/components/fragments.html
我做了什么,我不确定它是否是最好的方式,但是
当我想清除我做的所有交易
1)在您的活动中检查后堆栈中是否有任何交易,
并在你的片段中添加一个标志,在你的情况下是A.
int BACkStackCount = getSupportFragmentManager().getBACkStackEntryCount(); if(BACkStackCount > 0) { transactions.MUST_DETACH_FROM_BACKSTACK = true; getSupportFragmentManager().popBACkStackImmediate(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); }
2)在你的片段A里面,获取标志并删除fragent onCreateView并像这样返回null
public class transactions extends android.support.v4.app.Fragment{ public static Boolean MUST_DETACH_FROM_BACKSTACK = false; public transactions() { // required empty public constructor } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceStatE) { Log.i("FRAGMENT","onCreateView "+MUST_DETACH_FROM_BACKSTACK); // Inflate the layout for this fragment if (MUST_DETACH_FROM_BACKSTACK) { MUST_DETACH_FROM_BACKSTACK = false; getActivity().getSupportFragmentManager().begintransaction().remove(this).commit(); return null; } return inflater.inflate(R.layout.fragment_transactions,container,falsE); } @Override public void onViewCreated(View view,Bundle savedInstanceStatE) { super.onViewCreated(view,savedInstanceStatE); Log.i("FRAGMENT","onViewCreated"); if(view != null){ Log.i("FRAGMENT","ThreadStarted"); startThread(view); } }
但要小心我得到onResume()之后调用
OnCreateView()
即使使用getActivity().getSupportFragmentManager().begintransaction().remove(this).commit();
因此,如果你有任何conde onResume方法,你应该适当地处理它
以上是大佬教程为你收集整理的android – popBackStack导致一次又一次调用片段的oncreateView全部内容,希望文章能够帮你解决android – popBackStack导致一次又一次调用片段的oncreateView所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。