Fragment,在平板应用中较为参见,把视图分为两个甚至多个模块。

一,一个简单的fragment

1.创建两个局部文件,用于等待被调用

(1)left_fragment

(2)right_fragment

2.分别创建两个继承于fragment类的类

(1)leftFragment(加载xml文件)

public class LeftleftFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.left_fragment,container,false);//动态加载xml
return view;
}
}

(2)rightFragment

我是代码(同上);

3.在activity所调用的xml中添加<fragment>控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <fragment
android:id="@+id/left_fragment"
android:name="com.cenzhongman.myapplication.fragment.LeftleftFragment"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"/> <fragment
android:id="@+id/right_fragment"
android:name="com.cenzhongman.myapplication.fragment.RightFragment"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout>

二,动态切换fragment

4.在原基础之上创建AnotherRightFragment(指向要调用的layout)

我是代码(同上,较少重复加载)

5.在MainActivity所调用xml中更改布局方式

用两FrameLayout(强制左上角对齐的布局),来存放fragment,动态更新时候将会更换FrameLayout中的内容,也就是旗下的FrameLayout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <FrameLayout
android:id="@+id/left_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"> <fragment
android:name="com.cenzhongman.myapplication.fragment.LeftleftFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment" />
</FrameLayout> <FrameLayout
android:id="@+id/right_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"> <fragment
android:name="com.cenzhongman.myapplication.fragment.RightFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </FrameLayout>
</LinearLayout>

6.在MainActivity中更换fragment

public void onClick(View v) {
AnotherRightFragment anotherRightFragment = new AnotherRightFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.right_fragment, anotherRightFragment);
transaction.commit();//必须调用commit()方法,否则显示不出来
}

1. 创建待添加的碎片实例。
        2. 获取到 FragmentManager,在活动中可以直接调用 getFragmentManager()方法得到。
        3. 开启一个事务,通过调用 beginTransaction()方法开启。
        4. 向容器内加入碎片,一般使用 replace()方法实现,需要传入容器的 id 和待添加的碎
            片实例。
        5. 提交事务,调用 commit()方法来完成。

三,把fragment添加到返回栈

transaction.addToBackStack(null);//接收一个名字用于描述返回栈的状态,一般传入null即可

用fragment来做导航

1.在MainActivity的xml留出用于装fragment的容器

2.写好Fragment的xml描述文件

3.写四个Fragment的实现类,继承于Fragment

public class IdeaFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_idea,container,false);
return view;
}
}

4.MainActivity应继承于FragmentActivity,并创建Fragment对象

//定义fragment对象,基于v4包
private Fragment study_fragment;
private Fragment app_fragment;
private Fragment idea_fragment;
private Fragment personal_fragment; //定义fragmentManager对象
FragmentManager mFragmentManager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFragmentManager = getSupportFragmentManager();//基于v4包
initView(); }

5.得到FragmentTransaction对象,并根据情况选择添加或者显示fragment

!!!一定要commit()!!!

FragmentTransaction transaction = mFragmentManager.beginTransaction();

idea_Button.setImageResource(R.drawable.idea_blue);
idea_TextView.setTextColor(getResources().getColor(R.color.sky_blue));
if (idea_fragment == null) {
idea_fragment = new IdeaFragment();
transaction.add(R.id.content, idea_fragment);
transaction.commit();
} else {
transaction.show(idea_fragment);
transaction.commit();
}

参考资料:Fragment之底部导航栏的实现

Fragment碎片的创建和动态更新的更多相关文章

  1. 动态更新Toolbar Menu以及Menu中同时显示文字和图标

    动态更新Toolbar Menu以及Menu中同时显示文字和图标 我们经常会有这样的需求,在切换Fragment或者点击某个按钮后动态更新Toolbar上Menu项.但是onCreateOptions ...

  2. 14 Fragment 碎片总结

    Fragment 碎片 一, Fragment是什么? Android 3.0以后出现的 Api11 以上 Activity的组成部分 Fragment(小的Activity) Fragment可以显 ...

  3. 在Android中实现service动态更新UI界面

    之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的.那么如何实现service动态更新UI界面呢?案例:通过service ...

  4. Android中动态更新ListView(转)

    在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中.实现步骤:调用ListView的setOnSc ...

  5. iOS 利用 Framework 进行动态更新

    http://nixwang.com/2015/11/09/ios-dynamic-update/ 前言 目前 iOS 上的动态更新方案主要有以下 4 种: HTML 5 lua(wax)hotpat ...

  6. highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度

    highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度 作者:highcharts | 时间:2014-6-11 14:07:05 | [小  大] | ...

  7. AsyncTask用法解析-下载文件动态更新进度条

    1. 泛型 AysncTask<Params, Progress, Result> Params:启动任务时传入的参数,通过调用asyncTask.execute(param)方法传入. ...

  8. 仿百度壁纸客户端(五)——实现搜索动画GestureDetector手势识别,动态更新搜索关键字

    仿百度壁纸客户端(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Frag ...

  9. antd Select进阶功能 动态更新、函数防抖

    一.动态更新Options Antd Select自带的搜索功能很多时候需要结合后端的接口,输入一个关键字的时候会自动更新选择器的选项. 下面列一些注意点 基础实现 选择器选项必须和每次更新的数据挂钩 ...

随机推荐

  1. cocoaPods 的安装和使用

    参考:http://www.360doc.com/content/14/0309/10/11029609_358970353.shtml

  2. 大素数测试 求因子 poj 1811

    抄别人的 #include<stdio.h> #include<string.h> #include<algorithm> #include<stdlib.h ...

  3. JSP 中的 tag 文件

    在jsp文件中,可以引用 tag 和tld 文件,本文主要针对 tag 对于tag 文件 1)将此类文件放在 WEB-INF 下,比如 /WEB-INF/tags,tags 是目录,其下可以有多个.t ...

  4. pycharm实用快捷键

    提示 CTRL Q: 在参数列表位置,显示可以输入的所有参数. CTRL Q: 查看选中方法的文档字符串 阅读 CTRL -: 折叠当前代码 CTRL +: 展开当前代码 CTRL SHIFT -: ...

  5. 【BZOJ-1455】罗马游戏 可并堆 (左偏树)

    1455: 罗马游戏 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1355  Solved: 561[Submit][Status][Discuss] ...

  6. 【bzoj2705】 SDOI2012—Longge的问题

    http://www.lydsy.com/JudgeOnline/problem.php?id=2705 (题目链接) 题意 给定一个整数N,你需要求出∑gcd(i, N)(1<=i <= ...

  7. 树莓派利用PuTTY进行远程登录

    得到树莓派的IP:192.168.199.220 打开PuTTY: 端口为22 选择SSH 点击Open: 输入账号密码:pi/raspberry(注意,在linux下输入密码是看不见的) 如果要使用 ...

  8. Bzoj3531: [Sdoi2014]旅行

    Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1698  Solved: 758 Description S国有N个城市,编号从1到N.城市间用N-1 ...

  9. 用Python写了个抓图小脚本

    看上这个网页上一张图了,可惜他没有提供右键另存为,看了下网页代码,是可以找到图片原始链接的!但是因为没法和现实的图片一一对应,图又多,所以找起来还是麻烦...然后,我就想用 Python 把他们全部拉 ...

  10. grid列的值格式化

    //列格式化 waf.defineCustomeClass("cellformatter.ratioFomatter", cellformatter.defaultFormatte ...