// 主Activity
public class HomeActivity extends FragmentActivity implements OnClickListener {
private TextView footerLeft;
private TextView footerMiddle;
private TextView footerRight;
private Context context;
private FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_activity);
initArgs();
getView2Init();
initFragment(new Fragment1());
}
/**
* 初始化变量
*/
private void initArgs() {
context = HomeActivity.this;
fragmentManager = getSupportFragmentManager();
}
/**
* 获得布局文件上的控件并初始化
*/
private void getView2Init() {
// 获得控件View
footerLeft = (TextView) findViewById(R.id.tv_footer_left);
footerMiddle = (TextView) findViewById(R.id.tv_footer_middle);
footerRight = (TextView) findViewById(R.id.tv_footer_right);
// 初始化控件View
footerLeft.setOnClickListener(this);
footerMiddle.setOnClickListener(this);
footerRight.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// 当footer中的三个文本控件被点击时,作出回应
if (v == footerLeft) {
Toast.makeText(context, "点击了底栏left左边按钮", Toast.LENGTH_SHORT).show();
updateFragment(new Fragment1(), false);
} else if (v == footerMiddle) {
Toast.makeText(context, "点击了底栏middle中间按钮", Toast.LENGTH_SHORT).show();
updateFragment(new Fragment2(), false);
} else if (v == footerRight) {
Toast.makeText(context, "点击了底栏Right右边按钮", Toast.LENGTH_SHORT).show();
updateFragment(new Fragment3(), false);
}
}
/**
* 初始化Fragment
*
* @param f
*/
private void initFragment(Fragment f) {
updateFragment(f, true);
}
/**
* 更新Fragment
*
* @param f
* @param isInit
*/
private void updateFragment(Fragment f, boolean isInit) {
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content, f);
ft.commit();
}
}
// 用来实现切换的Adapter
public class MyPagerAdapter1 extends FragmentStatePagerAdapter {
protected static final String[] SUB_FRAGMENT = new String[] { "Fragment1_1", "Fragment1_2",
"Fragment1_3" }; // 对应于每个大Fragment的小Fragment
private int mCount = SUB_FRAGMENT.length;
public MyPagerAdapter1(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (0 == position) {
return new Fragment1_1();
} else if (1 == position) {
return new Fragment1_2();
} else if (2 == position) {
return new Fragment1_3();
} else {
System.out.println("创建子Fragment1_" + position + "失败");
return null;
}
}
@Override
public int getCount() {
return mCount;
}
@Override
public CharSequence getPageTitle(int position) {
return SUB_FRAGMENT[position % mCount];
}
}
// 主Activity下有三个一级Fragment,这是其中之一
public class Fragment1 extends Fragment {
private MyPagerAdapter1 mAdapter;
private ViewPager mPager;
private TitlePageIndicator mIndicator;
private static int mCurrentSubFragmentSeq = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment1, container, false);
System.out.println("F1:onCreateView");
mAdapter = new MyPagerAdapter1(getFragmentManager());
mPager = (ViewPager) v.findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mIndicator = (TitlePageIndicator) v.findViewById(R.id.titles);
mIndicator.setViewPager(mPager, mCurrentSubFragmentSeq);
System.out.println("2、mCurrent Sub Fragment Sequence: " + mCurrentSubFragmentSeq);
mIndicator.setFooterIndicatorStyle(IndicatorStyle.Triangle);
mIndicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
System.out.println("Changed to page " + position);
mCurrentSubFragmentSeq = position;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
// 每个一级Framgment下面有三个二级Fragment,这是其中之一
public class Fragment1_1 extends Fragment {
private static final String KEY_CONTENT = "Fragment1:Content";
private Bundle bundle;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT)) {
bundle = savedInstanceState.getBundle(KEY_CONTENT);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment1_1, container, false);
return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBundle(KEY_CONTENT, bundle);
}
}
分享到:
相关推荐
在本示例"Android ViewPager+Fragment嵌套使用Demo"中,我们将使用`ViewPager`与嵌套的`Fragment`结合,创建一个具有多个页面的应用。以下是实现步骤: 1. **设置依赖库**:在项目构建文件(如`build.gradle`)中...
以上就是关于"Fragment嵌套Fragment实现多tab页面"项目的一些关键知识点,这个项目不仅展示了Fragment的使用,还涉及到界面设计、事件处理和性能优化等多个方面,对于提升Android开发技能非常有帮助。
当`Fragment`与`ViewPager`结合使用时,可以实现多层嵌套的滑动界面,这对于构建复杂的、动态的应用界面非常有用。以下将详细介绍`Fragment`和`ViewPager`以及如何在实际项目中进行多层嵌套。 `Fragment`是Android ...
通过上述方式,你可以创建一个包含多个`Fragment`的滑动页面,每个`Fragment`还可以根据需求进一步嵌套其他`Fragment`,从而构建出复杂且交互丰富的Android应用界面。在实际开发中,还需要结合具体的业务需求和用户...
在标题“android vierpager+fragment嵌套viewpager+fragment”中,提到了`VierPager`,这可能是作者在描述时的误写,实际上应该是指`ViewPager`。因此,我们主要讨论的是如何在`ViewPager`中嵌套`Fragment`,以及`...
"Fragment嵌套Fragment"是指在一个Fragment内部再包含其他Fragment,这种设计模式在构建复杂用户界面时非常常见,特别是对于平板电脑等大屏幕设备。滑动菜单,又称为抽屉式导航(Drawer Navigation),则是Android...
至此,你已经掌握了Activity加载单个Fragment以及使用TabLayout+ViewPager实现多Fragment滑动的基本知识。在实际项目中,你可以根据需求扩展这些概念,比如添加动画效果、处理Fragment之间的通信、保存和恢复...
总之,Android主页面上多层Fragment嵌套结合ViewPager的滑动是一种常见且实用的设计模式,它能提供丰富的用户界面和流畅的交互体验。理解并熟练掌握这一技术,对于Android开发者来说至关重要。通过实践这个demo,...
在Android应用开发中,`ViewPager`和`Fragment`是两个重要的组件,它们常被结合使用以实现用户界面的滑动切换效果。`ViewPager`提供了一个可以左右滑动查看多个页面的容器,而`Fragment`则作为Activity的部分内容,...
在Android应用开发中,Fragment是Android SDK提供的一种用于在Activity中实现模块化界面的重要组件。Fragment可以看作是Activity的一部分,它可以有自己的UI布局,并且可以在Activity之间动态添加、删除或替换。...
通过嵌套Fragment,可以在一个Fragment内部再包含其他Fragment,这有助于代码的组织和重用。例如,你可能有一个主Fragment,它包含几个子Fragment,每个子Fragment负责展示不同类型的数据或执行特定的操作。 2. **...
`TextView`通常用于显示文本,而`Fragment`和`ViewPager`则是构建可滑动、可切换的界面内容的关键组件。下面将详细介绍如何使用`TextView`结合`Fragment`和`ViewPager`来实现底部导航栏的功能。 首先,我们需要理解...
基于滑动菜单(SlidingMenu)的Demo,其中主要解决了Fragment切换的状态保存,Fragment嵌套问题解决,Fragment多次加载UI问题修改,在Fragment中实现TabHost效果(fragment嵌套3层)! 解决的各个问题都是开发中经常...
总之,Fragment嵌套ViewPager结合TabHost和TabWidget的使用,是Android应用中实现多页面导航和交互的强大技术。通过这种方式,开发者可以创建出拥有丰富用户体验的复杂应用程序,同时保持代码的清晰性和可维护性。在...
总之,“Fragment嵌套(Viewpager+Fragment)”是一种常见的Android应用设计模式,它充分利用了Fragment的灵活性和ViewPager的滑动效果,构建出富有层次和动态性的界面。然而,这也需要开发者对Android的Fragment...
本Demo“Fragment中嵌套(Fragment+ViewPager)”旨在展示如何在Fragment中使用ViewPager来实现动态滑动页面的效果,这在很多应用中,如设置页面、新闻阅读器等场景非常常见。 首先,我们需要了解Fragment的基本概念...
在Android开发中,Fragment是应用程序界面的一个可重用组件,它可以在Activity中独立存在或与其他Fragment一起使用。Fragment提供了一种灵活的方式,使得开发者可以在不同的屏幕尺寸和配置上管理复杂的用户界面。本...
总结来说,FragmentDome是一个全面的示例项目,它展示了如何在Android应用中有效地使用Fragment,特别是在处理多层嵌套和与ViewPager集成时的最佳实践。通过对这个项目的深入研究,开发者能够提升自己的Android UI...
在Android开发中,Fragment是应用程序界面的一个可重用组件,它可以独立于Activity存在,并且可以在Activity之间进行嵌套和替换。随着Android系统的发展,尤其是在SDK 4.2及更高版本中,TabActivity逐渐被淘汰,而...
总的来说,`ViewPager`嵌套`Fragment`再嵌套`ViewPager`是一种复杂但常见的Android界面设计模式,它要求开发者对`ViewPager`和`Fragment`有深入的理解,并能熟练地处理数据源、适配器以及多层级的交互。在实际开发中...