[Android]Fragment的四种跳转

<p>一、简介</p><p>最近做项目涉及到了很多关于Fragment跳转的问题,虽然跳转的方式不多,但还是搞的我的晕头转向,所以写了一篇文章主要介绍有关Fragment的四种跳转方式:</p><p>1、从同一个Activiy的一个Fragment跳转到另外一个Fragment<br/></p><p>2、从一个Activity的Fragment跳转到另外一个Activity<br/></p><p>3、从一个Activity跳转到另外一个Activity的Fragment上</p><p>4、从一个Activity的Fragment跳转到另外一个Activity的Fragment上</p><p>二、准备工作(两个Activity和三个Fragment)</p><p>1、布局</p><p>在MainActivity的布局文件中写一个子布局</p><pre class="brush:as3;toolbar:false">&lt;FrameLayout android:id=&quot;@+id/fragment_container&quot; android:layout_width=&quot;match_parent&quot; android:layout_height=&quot;0dp&quot; android:layout_weight=&quot;1&quot;/&gt;</pre><p>2、创建两个java类文件继承v4包的Fragment,并重写onCreateView方法引用对应的Fragment布局文件(这里以其中一个为例)</p><pre class="brush:as3;toolbar:false">publicViewonCreateView(LayoutInflaterinflater,@NullableViewGroupcontainer,@NullableBundlesavedInstanceState){ if(contentView==null){ contentView=inflater.inflate(R.layout.my_fragment,container,false); ButtonmyButton=(Button)contentView.findViewById(R.id.my_button); ButtonmyReturn=(Button)contentView.findViewById(R.id.my_return); ButtonmyOther=(Button)contentView.findViewById(R.id.my_other); myButton.setOnClickListener(this); myReturn.setOnClickListener(this); myOther.setOnClickListener(this); } returncontentView; }</pre><p>3、在MainActivity中先添加进一个Fragment进行最开始的展示(压栈式添加)</p><pre class="brush:as3;toolbar:false">getSupportFragmentManager() .beginTransaction() .replace(R.id.fragment_container,newMyFragment()) .addToBackStack(null) .commit();</pre><p>4、在Fragment类中对几个按钮进行点击监听,在点击方法中对几个跳转进行操作(代码省略)</p><p>三、相关跳转操作</p><p>1、从同一个Activiy的一个Fragment跳转到另外一个Fragment</p><p>这个跳转与上面初始显示Fragment一样:</p><pre class="brush:as3;toolbar:false">getActivity().getSupportFragmentManager() .beginTransaction() .replace(R.id.xx,newXxxFragment(),null) .addToBackStack(null) .commit();</pre><p>说明:</p><p>R.id.xx:Fragment对应的Activity布局中FragmentLayout的id</p><p>new XxxFragment():要跳转到的Fragment</p><p>addToBackStack(null):可以省略不写(不写表示为非压栈式添加)</p><p>2、从一个Activity的Fragment跳转到另外一个Activity</p><p>此跳转与Activity之间的跳转如出一辙,只是引用上下文的时候,写成getActivity()即可!</p><pre class="brush:as3;toolbar:false">Intentintent=newIntent(getActivity(),OtherActivity.class); startActivity(intent);</pre><p>对应的相关代码(编辑器用的不熟练(将就看呀)):</p><pre class="brush:as3;toolbar:false">@Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.my_button: /**一、从同一个Activity的一个Fragment跳到另外一个Fragment*/ //1、压栈式跳转 getActivity().getSupportFragmentManager() .beginTransaction() .replace(R.id.fragment_container,newYourFragment(),null) .addToBackStack(null) .commit(); //2、非压栈式跳转// //getActivity().getSupportFragmentManager()// //.beginTransaction()// //.replace(R.id.fragment_container,newYourFragment(),null)// //.commit(); break; caseR.id.my_return://返回到上一个Fragment(同一个Activity中) getActivity().getSupportFragmentManager().popBackStack(); break; /** 二、从一个Activity的Fragment跳转到另外一个Activity(等同于Activity之间的跳转(上下文是getActivity)) */ caseR.id.my_other: Intentintent=newIntent(getActivity(),OtherActivity.class); startActivity(intent); break; } }</pre><p>3、从一个Activity跳转到另外一个Activity的Fragment上</p><p>例如我们要从OtherActivity跳转到MainActivity的YourFragment上去:</p><p>首先,我们在OtherActivity中的跳转事件中给MainActivity传递一个名为id的参数:</p><pre class="brush:as3;toolbar:false">Intentintent=newIntent(OtherActivity.this,MainActivity.class); intent.putExtra(&quot;id&quot;,1); startActivity(intent);</pre><p>然后,我们在MainActivity里接收id值,对值进行判断,如果正确进行跳转操作:</p><pre class="brush:cpp;toolbar:false">intid=getIntent().getIntExtra(&quot;id&quot;,0); if(id==1){ getSupportFragmentManager() .beginTransaction() .replace(R.id.fragment_container,newYourFragment()) .addToBackStack(null) .commit(); }</pre><p>4、从一个Activity的Fragment跳转到另外一个Activity的Fragment上</p><p>这种跳转与第三种跳转极为类似,我们只需要将上面的</p><p>Intent intent = new Intent(OtherActivity.this, MainActivity.class);</p><p>书写在对应的Fragment中,将OtherActivity.this更改为getActivity(),其他不用改变,几个完成跳转。</p><p>四、总结</p><p>目前自己用到的几种跳转就是以上这四种类型,对于初学者来说一口气学四种跳转难免会被搞的晕头转向,但一旦用多了就会发现其实也并不难。</p><p>** ps: ** 这是本人第一次写博客,以前一直没有写博客的习惯,如果有写的不好的地方还望各位多多指教。</p>
RangeTime:0.005768s
RangeMem:211.59 KB
返回顶部 留言