`
Caoyu_google
  • 浏览: 23182 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android使用Fragment嵌套Fragment的方式实现界面滑动

阅读更多
// 主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 Fragment嵌套使用Demo

    在本示例"Android ViewPager+Fragment嵌套使用Demo"中,我们将使用`ViewPager`与嵌套的`Fragment`结合,创建一个具有多个页面的应用。以下是实现步骤: 1. **设置依赖库**:在项目构建文件(如`build.gradle`)中...

    Fragment嵌套Fragment实现多tab页面

    以上就是关于"Fragment嵌套Fragment实现多tab页面"项目的一些关键知识点,这个项目不仅展示了Fragment的使用,还涉及到界面设计、事件处理和性能优化等多个方面,对于提升Android开发技能非常有帮助。

    多层Fragment嵌套(Fragment+ViewPager)滑动

    当`Fragment`与`ViewPager`结合使用时,可以实现多层嵌套的滑动界面,这对于构建复杂的、动态的应用界面非常有用。以下将详细介绍`Fragment`和`ViewPager`以及如何在实际项目中进行多层嵌套。 `Fragment`是Android ...

    ViewPager+Fragment,Fragment嵌套Fragment实现页面活动

    通过上述方式,你可以创建一个包含多个`Fragment`的滑动页面,每个`Fragment`还可以根据需求进一步嵌套其他`Fragment`,从而构建出复杂且交互丰富的Android应用界面。在实际开发中,还需要结合具体的业务需求和用户...

    android vierpager+fragment嵌套viewpager+fragment

    在标题“android vierpager+fragment嵌套viewpager+fragment”中,提到了`VierPager`,这可能是作者在描述时的误写,实际上应该是指`ViewPager`。因此,我们主要讨论的是如何在`ViewPager`中嵌套`Fragment`,以及`...

    fragment嵌套fragment和滑动菜单

    "Fragment嵌套Fragment"是指在一个Fragment内部再包含其他Fragment,这种设计模式在构建复杂用户界面时非常常见,特别是对于平板电脑等大屏幕设备。滑动菜单,又称为抽屉式导航(Drawer Navigation),则是Android...

    Activity嵌套fragment大全,activity加载单个fragment,TabLayout+ViewPager实现多个fragment滑动效果

    至此,你已经掌握了Activity加载单个Fragment以及使用TabLayout+ViewPager实现多Fragment滑动的基本知识。在实际项目中,你可以根据需求扩展这些概念,比如添加动画效果、处理Fragment之间的通信、保存和恢复...

    Android主页面 多层Fragment嵌套(Fragment+ViewPager)滑动

    总之,Android主页面上多层Fragment嵌套结合ViewPager的滑动是一种常见且实用的设计模式,它能提供丰富的用户界面和流畅的交互体验。理解并熟练掌握这一技术,对于Android开发者来说至关重要。通过实践这个demo,...

    Android ViewPager和Fragment 实现滑动切换页面

    在Android应用开发中,`ViewPager`和`Fragment`是两个重要的组件,它们常被结合使用以实现用户界面的滑动切换效果。`ViewPager`提供了一个可以左右滑动查看多个页面的容器,而`Fragment`则作为Activity的部分内容,...

    Android Fragment的嵌套

    在Android应用开发中,Fragment是Android SDK提供的一种用于在Activity中实现模块化界面的重要组件。Fragment可以看作是Activity的一部分,它可以有自己的UI布局,并且可以在Activity之间动态添加、删除或替换。...

    Fragment的嵌套和侧滑菜单DrawerLayout加标签页的使用demo

    通过嵌套Fragment,可以在一个Fragment内部再包含其他Fragment,这有助于代码的组织和重用。例如,你可能有一个主Fragment,它包含几个子Fragment,每个子Fragment负责展示不同类型的数据或执行特定的操作。 2. **...

    TextView加Fragment实现底部导航栏 Fragment里面嵌套ViewPager

    `TextView`通常用于显示文本,而`Fragment`和`ViewPager`则是构建可滑动、可切换的界面内容的关键组件。下面将详细介绍如何使用`TextView`结合`Fragment`和`ViewPager`来实现底部导航栏的功能。 首先,我们需要理解...

    滑动菜单之Fragment嵌套及状态保存

    基于滑动菜单(SlidingMenu)的Demo,其中主要解决了Fragment切换的状态保存,Fragment嵌套问题解决,Fragment多次加载UI问题修改,在Fragment中实现TabHost效果(fragment嵌套3层)! 解决的各个问题都是开发中经常...

    Fragment嵌套ViewPager

    总之,Fragment嵌套ViewPager结合TabHost和TabWidget的使用,是Android应用中实现多页面导航和交互的强大技术。通过这种方式,开发者可以创建出拥有丰富用户体验的复杂应用程序,同时保持代码的清晰性和可维护性。在...

    Fragment嵌套(Viewpager+Fragment)

    总之,“Fragment嵌套(Viewpager+Fragment)”是一种常见的Android应用设计模式,它充分利用了Fragment的灵活性和ViewPager的滑动效果,构建出富有层次和动态性的界面。然而,这也需要开发者对Android的Fragment...

    Fragment中嵌套(Fragment+ViewPager)完整Demo

    本Demo“Fragment中嵌套(Fragment+ViewPager)”旨在展示如何在Fragment中使用ViewPager来实现动态滑动页面的效果,这在很多应用中,如设置页面、新闻阅读器等场景非常常见。 首先,我们需要了解Fragment的基本概念...

    fragment的嵌套布局

    在Android开发中,Fragment是应用程序界面的一个可重用组件,它可以在Activity中独立存在或与其他Fragment一起使用。Fragment提供了一种灵活的方式,使得开发者可以在不同的屏幕尺寸和配置上管理复杂的用户界面。本...

    FragmentDome,包括嵌套viewpager,Fragment多层嵌套

    总结来说,FragmentDome是一个全面的示例项目,它展示了如何在Android应用中有效地使用Fragment,特别是在处理多层嵌套和与ViewPager集成时的最佳实践。通过对这个项目的深入研究,开发者能够提升自己的Android UI...

    android中fragment的实现。完全取代选项卡

    在Android开发中,Fragment是应用程序界面的一个可重用组件,它可以独立于Activity存在,并且可以在Activity之间进行嵌套和替换。随着Android系统的发展,尤其是在SDK 4.2及更高版本中,TabActivity逐渐被淘汰,而...

    viewpager嵌套fragment 再嵌套

    总的来说,`ViewPager`嵌套`Fragment`再嵌套`ViewPager`是一种复杂但常见的Android界面设计模式,它要求开发者对`ViewPager`和`Fragment`有深入的理解,并能熟练地处理数据源、适配器以及多层级的交互。在实际开发中...

Global site tag (gtag.js) - Google Analytics