专栏首页陶士涵的菜地[android] fragment的动态创建

[android] fragment的动态创建

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SAP Cloud for Customer的Container应用设计原理

    相信大部分C4C的UI developer包括我刚开始的时候都会比较好奇我们平时写的javascript代码是如何运行在移动设备上的,同样的,我也对这个问题十分...

    Jerry Wang
  • 干货 | 加载速度提升15%,携程对RN新一代JS引擎Hermes的调研

    储贻锋,携程无线平台研发部基础框架组资深Android研发,目前主要负责CRN Android端和携程Android基础架构的维护与开发工作。

    用户1292807
  • 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决

    这句话几乎概括了计算机软件体系结构的设计要点.整个体系从上到下都是按照严格的层级结构设计的.

    一个会写诗的程序员
  • Azkaban-3.x源码编译以及Solo-Server模式部署

    查看azkaban-3.73.1/gradle/wrapper/gradle-wrapper.properties文件:

    CoderJed
  • 如何响应用户交互事件

    指针事件表示用户交互的原始触摸数据,如手指接触屏幕 PointerDownEvent、手指在屏幕上移动 PointerMoveEvent、手指抬起 Pointe...

    拉维
  • 再谈路由与导航,详谈Flutter是如何实现页面切换的

    如果说 UI 框架的视图元素的基本单位是组件,那应用程序的基本单位就是页面了。对于拥有多个页面的应用程序而言,如何从一个页面平滑地过渡到另一个页面,我们需要有一...

    拉维
  • 如何获得微信小游戏跳一跳源码以及源代码组合包括哪些

    很多小游戏都是由源代码编写而成的,那大家知道源代码组合包括哪些吗?手机游戏源代码怎么使用的呢?还有,如何获得微信小游戏跳一跳源码?下面就由奇瑰网小编带大家来了解...

    小瓶子
  • 一步步搭建采用Gradle来运行Spring Boot应用的生产环境

    Gradle Wrapper 免去了用户在使用 Gradle 进行项目构建时需要安装 Gradle 的繁琐步骤. 每个 Gradle Wrapper 都绑定到一...

    白石
  • 作为一名SAP从业人员,需要专门学习数学么

    先回忆回忆自己本科和研究生学过的数学课程。Jerry的大一生活是在电子科技大学的九里堤校区度过的,本科第一门数学课就是微积分。

    Jerry Wang
  • Android实现轮播图点击图片放大效果

    最近项目中需要实现轮播图显示商品图片,当用户点击商品图片的时候,需要图片放大显示,当然用户还能进行多张图片的滑动切换,放大,缩小图片等操作,实现起来相对还是比较...

    SoullessCoder

扫码关注云+社区

领取腾讯云代金券