前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[android] fragment的动态创建

[android] fragment的动态创建

作者头像
唯一Chat
发布2019-09-10 14:49:59
2.1K0
发布2019-09-10 14:49:59
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

在一个商业软件中,会有很多的界面,如果没一个界面对应一个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

代码语言:javascript
复制
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

代码语言:javascript
复制
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);
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-04-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档