Android开发 FragmentManage的详解
<h1><span style="color: rgba(0, 128, 128, 1)">前言</span></h1><p><span style="color: rgba(0, 128, 128, 1)"> <span style="color: rgba(0, 0, 0, 1)">我还在学习Android开发的时候发过一篇简单的入门Fragment demo代码:</span>https://www.cnblogs.com/guanxinjing/p/9708626.html <span style="color: rgba(0, 0, 0, 1)">但是,Fragment远远不是一个简单的Demo就能了解清楚的,所以此篇博客将讲解FragmentManage的Api的功能</span></span></p>
<h1><span style="color: rgba(0, 128, 128, 1)">如何获取FragmentManage</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">activity里获取FragmentManage方式如下:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">@Override
<span style="color: rgba(0, 0, 255, 1)">protected <span style="color: rgba(0, 0, 255, 1)">void<span style="color: rgba(0, 0, 0, 1)"> onCreate(Bundle savedInstanceState) {
<span style="color: rgba(0, 0, 255, 1)">super<span style="color: rgba(0, 0, 0, 1)">.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
FragmentManager fragmentManager =<span style="color: rgba(0, 0, 0, 1)"> getSupportFragmentManager();
}</span></span></span></span></span></span></span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">FragmentManage的API</span></h1>
<h2><span style="color: rgba(0, 128, 128, 1)">findFragmentByTag</span></h2>
<p> </p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> addAndFind() {
FragmentManager fragmentManager </span>=<span style="color: rgba(0, 0, 0, 1)"> getSupportFragmentManager();
FragmentTransaction transaction </span>=<span style="color: rgba(0, 0, 0, 1)"> fragmentManager.beginTransaction();
transaction.add(R.id.frameLayout, </span><span style="color: rgba(0, 0, 255, 1)">new</span> OneFragment(), "one"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">添加容器布局id/ Fragment/ tag</span>
transaction.add(R.id.frameLayout, <span style="color: rgba(0, 0, 255, 1)">new</span> TwoFragment(), "two"<span style="color: rgba(0, 0, 0, 1)">);
transaction.commitNow();</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">commitNow()为立即提交, 如果使用commit()提交可能会导致下面findFragmentByTag获取的Fragment为空</span>
Fragment fragment = fragmentManager.findFragmentByTag("one"); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查找指定tag的Fragment</span>
Log.e(TAG, "fragments size = " +<span style="color: rgba(0, 0, 0, 1)"> fragmentManager.getFragments().size());
Log.e(TAG, </span>"Fragment id = " +<span style="color: rgba(0, 0, 0, 1)"> fragment.getId());
Log.e(TAG, </span>"Fragment tag = " +<span style="color: rgba(0, 0, 0, 1)"> fragment.getTag());
Log.e(TAG, </span>"Fragment name = " +<span style="color: rgba(0, 0, 0, 1)"> fragment.getClass().getName());
}</span> </pre>
</div>
<p>结果日志:</p>
<div class="cnblogs_code">
<pre>2020-02-24 10:39:22.838 5148-5148/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: fragments size = 2
2020-02-24 10:39:22.838 5148-5148/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: Fragment id = 2131230838
2020-02-24 10:39:22.838 5148-5148/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: Fragment tag =<span style="color: rgba(0, 0, 0, 1)"> one
</span>2020-02-24 10:39:22.838 5148-5148/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: Fragment name = com.zh.fragmentdemo.OneFragment</pre>
</div>
<h2><span style="color: rgba(0, 128, 128, 1)">findFragmentById</span></h2>
<p><span style="color: rgba(0, 0, 0, 1)">请注意使用findFragmentById,只会查找到指定布局最后一个添加的Fragment(栈中最上面的Fragment)</span></p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> addAndFindById() {
FragmentManager fragmentManager </span>=<span style="color: rgba(0, 0, 0, 1)"> getSupportFragmentManager();
FragmentTransaction transaction </span>=<span style="color: rgba(0, 0, 0, 1)"> fragmentManager.beginTransaction();
transaction.add(R.id.frameLayout, </span><span style="color: rgba(0, 0, 255, 1)">new</span> OneFragment(), "one"<span style="color: rgba(0, 0, 0, 1)">);
transaction.add(R.id.frameLayout, </span><span style="color: rgba(0, 0, 255, 1)">new</span> TwoFragment(), "two"<span style="color: rgba(0, 0, 0, 1)">);
transaction.commitNow();
Fragment fragment1 </span>= fragmentManager.findFragmentById(R.id.frameLayout);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">使用容器布局id查找,只会找到栈最后添加的Fragment</span>
Log.e(TAG, "1 Fragments size = " +<span style="color: rgba(0, 0, 0, 1)"> fragmentManager.getFragments().size());
Log.e(TAG, </span>"1 Fragment id = " +<span style="color: rgba(0, 0, 0, 1)"> fragment1.getId());
Log.e(TAG, </span>"1 Fragment tag = " +<span style="color: rgba(0, 0, 0, 1)"> fragment1.getTag());
Log.e(TAG, </span>"1 Fragment name = " +<span style="color: rgba(0, 0, 0, 1)"> fragment1.getClass().getName());
FragmentTransaction transaction2 </span>= fragmentManager.beginTransaction(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">FragmentTransaction每次调用commit后,就需要重新获取一个</span>
transaction2.remove(fragment1); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">移除上面获取到的Fragment</span>
transaction2.commitNow(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">立即提交</span>
Fragment fragment2 =<span style="color: rgba(0, 0, 0, 1)"> fragmentManager.findFragmentById(R.id.frameLayout);
Log.e(TAG, </span>"2 Fragments size = " +<span style="color: rgba(0, 0, 0, 1)"> fragmentManager.getFragments().size());
Log.e(TAG, </span>"2 Fragment id = " +<span style="color: rgba(0, 0, 0, 1)"> fragment2.getId());
Log.e(TAG, </span>"2 Fragment tag = " +<span style="color: rgba(0, 0, 0, 1)"> fragment2.getTag());
Log.e(TAG, </span>"2 Fragment name = " +<span style="color: rgba(0, 0, 0, 1)"> fragment2.getClass().getName());
}</span></pre>
</div>
<p>结果日志:</p>
<div class="cnblogs_code">
<pre>2020-02-24 11:23:25.052 5931-5931/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: 1 Fragments size = 2
2020-02-24 11:23:25.052 5931-5931/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: 1 Fragment id = 2131230838
2020-02-24 11:23:25.052 5931-5931/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: 1 Fragment tag =<span style="color: rgba(0, 0, 0, 1)"> two
</span>2020-02-24 11:23:25.052 5931-5931/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: 1 Fragment name =<span style="color: rgba(0, 0, 0, 1)"> com.zh.fragmentdemo.TwoFragment
</span>2020-02-24 11:23:25.054 5931-5931/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: 2 Fragments size = 1
2020-02-24 11:23:25.055 5931-5931/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: 2 Fragment id = 2131230838
2020-02-24 11:23:25.055 5931-5931/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: 2 Fragment tag =<span style="color: rgba(0, 0, 0, 1)"> one
</span>2020-02-24 11:23:25.055 5931-5931/com.zh.fragmentdemo E/com.zh.fragmentdemo.MainActivity: 2 Fragment name = com.zh.fragmentdemo.OneFragment </pre>
</div>
<h2><span style="color: rgba(0, 128, 128, 1)">saveFragmentInstanceState</span></h2>
<p><span style="color: rgba(0, 128, 128, 1)">保存实例状态</span></p>
<h2><span style="color: rgba(0, 128, 128, 1)">isStateSaved</span></h2>
<p>是否状态已保存</p>
<h2><span style="color: rgba(0, 128, 128, 1)">isDestroyed</span></h2>
<p><span style="color: rgba(0, 128, 128, 1)">是否摧毁</span></p>
<p> </p>
<p> </p>
<h2><span style="color: rgba(0, 128, 128, 1)">addOnBackStackChangedListener </span></h2>
<p><span style="color: rgba(0, 128, 128, 1)">添加返回堆栈变化监听</span></p>
<p> </p>
<p> </p>
<h2><span style="color: rgba(0, 128, 128, 1)">getBackStackEntryCount</span></h2>
<p><span style="color: rgba(0, 128, 128, 1)">返回堆栈输入计数</span></p>
<h2><span style="color: rgba(0, 128, 128, 1)">getBackStackEntryAt</span></h2>
<p> </p>
<p> </p>
<h2><span style="color: rgba(0, 128, 128, 1)">getPrimaryNavigationFragment</span></h2>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<h2><span style="color: rgba(0, 128, 128, 1)">putFragment </span></h2>
<p> </p>
<h2><span style="color: rgba(0, 128, 128, 1)">getFragment</span></h2>
<p> </p>
<h2><span style="color: rgba(0, 128, 128, 1)">getFragments</span></h2>
<p> </p>
<h2><span style="color: rgba(0, 128, 128, 1)">popBackStack</span></h2>
<p>弹出返回堆栈</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>end</p>
</div>
<div id="MySignature" role="contentinfo">
<div style="text-align: center">
<p style="color:orange;font-size:16px;" >本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/12335439.html </p>
<div style="color:orange;font-size:16px;">本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。 </div>
</div><br><br>
来源:https://www.cnblogs.com/guanxinjing/p/12335439.html
頁:
[1]