Android Fragment的切换

在主布局中有FrameLayout,如何在代码中对FrameLayout进行切换不同的Fragment呢?

布局文件中的FrameLayout:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:orientation="vertical">
        <FrameLayout
            android:id="@+id/content_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
</LinearLayout>

主界面:

    //记录当前Fragment
    private Fragment nowFragment;
    //其他的Fragment
    private NewsFragment newsFragment;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化Fragment
        initFragment(savedInstanceState);
        if (newsFragment == null) {
            newsFragment = new NewsFragment();
        }
        switchContent(nowFragment, newsFragment);
    }

    /**
     * 初始化Fragment
     *
     * @param savedInstanceState
     */
    private void initFragment(Bundle savedInstanceState) {
        //避免横竖屏时出现页面叠加,判断activity是否重新加载
        if (savedInstanceState == null) {
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            if (newsFragment == null) {
                newsFragment = new NewsFragment();
            }
            nowFragment = newsFragment;
            ft.replace(R.id.content_layout, nowFragment).commitAllowingStateLoss();
        }
    }

    /**
     * 防止Fragement数据重复加载,采用显示和隐藏的方式
     *
     * @param from
     * @param to
     */
    public void switchContent(Fragment from, Fragment to) {
        if (nowFragment != to) {
            nowFragment = to;
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            //检测去往的Fragment是否被添加
            if (!to.isAdded()) {
                //如果没有添加,就隐藏当前Fragment,添加下一个Fragment
                ft.hide(from).add(R.id.content_layout, to).commitAllowingStateLoss();
            } else {
                //如果已经被添加,就隐藏当前Fragment,直接显示下一个Fragement
                ft.hide(from).show(to).commitAllowingStateLoss();
            }
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,143评论 25 709
  • 前言 Fragment想必大家不陌生吧,在日常开发中,对于Fragment的使用也很频繁,现在主流的APP中,基本...
    斜杠时光阅读 2,600评论 4 22
  • Fragment 描述:   翻译可以译为:碎片、片段,Android 3.0开始引入fragments 的概念;...
    Lost_Robot阅读 1,781评论 0 11
  • 谁的青春不迷茫,迷茫似乎成了青春的代名词,为什么现在越来越多的年轻人越老越容易陷入迷茫,有的人30岁还是看不清自己...
    酸李子阅读 423评论 0 1
  • 1.幸福是快乐与意义的结合。 快乐来自当下的利益,意义来自未来的利益。想获得幸福,要同时兼顾当下和未来的利益。 2...
    安定的猫阅读 172评论 0 0