分享好友 移动开发首页 频道列表

fragment的动态创建

Android开发  2016-11-16 09:230

在一个商业软件中,会有很多的界面,如果没一个界面对应一个 activity ,那么 activity 会非常的多,清单文件也会非常的乱,谷歌在 android3.0 以后引入了新的概念叫 fragment

fragment 无需在清单文件中配置,轻量级的 activity ,在所属的 activity 布局文件中进行配置

在布局文件中使用 fragment 控件

添加 <fragment> 节点,设置名称是 fragment 指向的类全路径

其他属性和别的控件一样

新建一个类 Fragment1 继承系统的 Fragment 类,此时会报错误,是因为,我们兼容的 android 系统最低版本是 8 fragment 11 版本才引入的,可以先把兼容版本改成 11

重写 onCreateView() 方法,当 fragment 被创建的时候回调的方法,返回当前的 View 对象,传递进来一个 LayoutInflate 对象,

调用 LayoutInflate 对象的 inflate() 方法,获得 View 对象,参数:资源, ViewGroup 对象

fragment 最初设计的时候,是为了适应平板的大屏幕,例如,左侧一个 listview ,右边一个 fragment ,点击 ListView 的不同的条目,右边 fragment 的内容随之变化,用户体验更好

动态创建

实现,当用户竖着拿手机显示一个界面,当横着拿时显示另外一个界面

判断当前手机的朝向,通过屏幕的宽度和高度的对比来实现

调用 getWindowManager().getDefaultDisplay().getWidth() 获取宽度

调用 getWindowManager().getDefaultDisplay().getHeight() 获取高度

如果高度大于宽度,是竖屏

如果宽度大于高度,是横屏

新建 Fragment1 Fragment2 类,继承系统的 Fragment

获取 Fragment 对象,通过 new 出来

获取 FragmentManager 对象,通过 getFragmentManager() 方法

调用 FragmentManager 对象的 beginTransaction() 方法,开启事务,获得 FragmentTransaction 对象

调用 FragmentTransaction 对象的 replace() 方法,用 Fragment 替换当前界面,参数: containerViewId Fragment 对象

containerViewId 是容器的 id ,可以使用 android.R.id.content 代表当前界面的 id

调用 FragmentTransaction 对象的 commit() 方法,提交事务

模拟器 ctrl+f11 切换横竖屏

MainActivity.java

package com.tsh.myfragment;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Fragment1 f1 = new Fragment1();
        Fragment2 f2 = new Fragment2();
        // 判断横竖屏
        int width = getWindowManager().getDefaultDisplay().getWidth();
        int height = getWindowManager().getDefaultDisplay().getHeight();
        FragmentManager fm = getFragmentManager();
        FragmentTransaction fr = fm.beginTransaction();
        if (width < height) {// 竖屏
            fr.replace(android.R.id.content, f1);
        } else {// 横屏
            fr.replace(android.R.id.content, f2);
        }
        fr.commit();
    }
}

Fragment1.java

package com.tsh.myfragment;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment2 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment2, null);
    }
}

查看更多关于【Android开发】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Supporting Multiple Screens
术语和概念Screen size 屏幕尺寸又称「屏幕大小」,是屏幕对角线的物理尺寸。单位英寸 inch,比如 Samsung Note4 是 5.7 英寸。Resolution 屏幕分辨率屏幕纵横方向上物理像素的总数,比如 Samsung Note4 是 2560x1440,表示纵向有 2560 个像素,横向有 1440

0评论2017-02-05363

Android插件化(4):OpenAtlasの插件的卸载与更新
如果看过我的前两篇博客Android插件化(2):OpenAtlas插件安装过程分析和Android插件化(3):OpenAtlas的插件重建以及使用时安装,就知道在插件的安装过程中OpenAtlas做了哪些事,那么插件的卸载就只需要把持久化和内存中的内容移除即可。1.插件的卸载插件卸载的

0评论2017-02-05229

个人简历
吴朝晖/男/1993.1本科/南京师范大学中北学院信息系工作年限:1年以内技术博客:wuzhaohui026.github.ioGitHub:https://github.com/wuzhaohui026期望职位:Android开发(初级Android工程师)期望薪资:税前月薪5.5k~7k期望城市:常州工作经历常州慧展信息科技有

0评论2017-02-05126

Android插件化(五):OpenAtlasの四大组件的Hack
引言到目前为止,我们已经分析了OpenAtlas中插件的安装,卸载,更新,以及安装好插件之后组件类的加载过程,但是对于这些是如何引发的还不知道,比如,在宿主的一个Activit中调用startActivity()跳转到插件中的一个Activity,如何判断这个Activity在的插件是否

0评论2017-02-0598

更多推荐