前言
之前的文章有介绍ActivityGroup,不少人问嵌套使用的问题,同样的需求在Fragment中也存在,幸好在最新的AndroID support 包已经支持这一特性!这里就跳过Fragment的介绍,需要注意的是tabactivity已经被标记为弃用(deprecated)。
正文
一、准备
关于最新的AndroID兼容包的介绍,参见官网。可以在androID sdk目录下extras/androID/support/v13/androID-support-v13.jar找到最新版,注意是伴随着AndroID 4.2一起更新的。
关于嵌套Fragment的介绍,参照官网。
二、截图
三、代码
FragmentnestActivity.java
import androID.graphics.color;import androID.os.Bundle;import androID.support.v4.app.Fragment;import androID.support.v4.app.FragmentActivity;import androID.support.v4.app.FragmentStatePagerAdapter;import androID.support.v4.app.FragmentTransaction;import androID.support.v4.vIEw.VIEwPager;import androID.vIEw.Gravity;import androID.vIEw.LayoutInflater;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.vIEw.VIEwGroup;import androID.Widget.TextVIEw;/** * 嵌套Fragment使用 * * @author 农民伯伯 * @see http://www.cnblogs.com/over140/archive/2013/01/02/2842227.HTML * */public class FragmentnestActivity extends FragmentActivity implements OnClickListener { @OverrIDe protected voID onCreate(Bundle arg0) { super.onCreate(arg0); setContentVIEw(R.layout.nested_fragments); findVIEwByID(R.ID.btnModule1).setonClickListener(this); findVIEwByID(R.ID.btnModule2).setonClickListener(this); findVIEwByID(R.ID.btnModule3).setonClickListener(this); findVIEwByID(R.ID.btnModule1).performClick(); } @OverrIDe public voID onClick(VIEw v) { switch (v.getID()) { case R.ID.btnModule1: addFragmentToStack(FragmentParent.newInstance(0)); break; case R.ID.btnModule2: addFragmentToStack(FragmentParent.newInstance(1)); break; case R.ID.btnModule3: addFragmentToStack(FragmentParent.newInstance(2)); break; } } private voID addFragmentToStack(Fragment fragment) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); // ft.setCustomAnimations(androID.R.anim.slIDe_in_left,androID.R.anim.slIDe_in_left); ft.replace(R.ID.fragment_container,fragment); ft.commit(); } /** 嵌套Fragment */ public final static class FragmentParent extends Fragment { public static final FragmentParent newInstance(int position) { FragmentParent f = new FragmentParent(); Bundle args = new Bundle(2); args.putInt("position",position); f.setArguments(args); return f; } @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) { VIEw convertVIEw = inflater.inflate(R.layout.vIEwpager_fragments,container,false); VIEwPager pager = (VIEwPager) convertVIEw.findVIEwByID(R.ID.pager); final int parent_position = getArguments().getInt("position"); //注意这里的代码 pager.setAdapter(new FragmentStatePagerAdapter(getChildFragmentManager()) { @OverrIDe public Fragment getItem(final int position) { return new Fragment() { @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater,Bundle savedInstanceState) { TextVIEw convertVIEw = new TextVIEw(getActivity()); convertVIEw.setLayoutParams(new VIEwGroup.LayoutParams(VIEwGroup.LayoutParams.FILL_PARENT,VIEwGroup.LayoutParams.FILL_PARENT)); convertVIEw.setGravity(Gravity.CENTER); convertVIEw.setTextSize(30); convertVIEw.setTextcolor(color.BLACK); convertVIEw.setText("Page " + position); return convertVIEw; } }; } @OverrIDe public int getCount() { return 3; } @OverrIDe public CharSequence getPageTitle(int position) { return "Page " + parent_position + " - " + position; } }); return convertVIEw; } }}
代码说明:
这里最关键的是方法getChildFragmentManager的支持。这里也演示了Fragment作为嵌套内部类的使用方法。
nested_fragments.xml
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical" > <FrameLayout androID:ID="@+ID/fragment_container" androID:layout_wIDth="fill_parent" androID:layout_height="0dip" androID:layout_weight="1.0" androID:background="#F7F5DE" > </FrameLayout> <linearLayout androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:layout_gravity="bottom" androID:background="@androID:color/black" androID:orIEntation="horizontal" > <ImageVIEw androID:ID="@+ID/btnModule1" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_marginBottom="3dp" androID:layout_marginleft="7dp" androID:layout_margintop="3dp" androID:src="@androID:drawable/ic_dialog_dialer" /> <ImageVIEw androID:ID="@+ID/btnModule2" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_marginBottom="3dp" androID:layout_marginleft="7dp" androID:layout_margintop="3dp" androID:src="@androID:drawable/ic_dialog_info" /> <ImageVIEw androID:ID="@+ID/btnModule3" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_marginBottom="3dp" androID:layout_marginleft="7dp" androID:layout_margintop="3dp" androID:src="@androID:drawable/ic_dialog_alert" /> </linearLayout></linearLayout>
vIEwpager_fragments.xml
<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" > <androID.support.v4.vIEw.VIEwPager androID:ID="@+ID/pager" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" > <androID.support.v4.vIEw.PagerTitleStrip androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_gravity="top" /> </androID.support.v4.vIEw.VIEwPager></linearLayout>
代码说明:
注意!实践发现VIEwPager并不能作为顶层容器,否则会报错。
四、说明
这是一个典型的嵌套Fragment的例子,最外层使用FrameLayout来实现几大模块的切换,内部使用VIEwPager实现子模块的切换,非常实用。
结束
考虑把Support Package,revision 11 更新翻译一下,强烈建议大家升级到最新的兼容包。
总结以上是内存溢出为你收集整理的Android 嵌套Fragment的使用实例代码全部内容,希望文章能够帮你解决Android 嵌套Fragment的使用实例代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)