android (二) -fragment 的动态加载
来源:互联网 发布:云计算操作系统虚拟化 编辑:程序博客网 时间:2024/05/20 18:55
前提,6个布局文件和5个Fragment的实现,这里我们用到了十张图片
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ccc" android:orientation="vertical" tools:context="com.example.m_93fragmentact.MainActivity" > <FrameLayout android:id="@+id/fl" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" > </FrameLayout> <View android:layout_width="match_parent" android:layout_height="0.6dp" android:background="#E0FFFF" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#fff" android:orientation="horizontal" > <ImageView android:id="@+id/tuijian" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/tuijian1" /> <ImageView android:id="@+id/faxian" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/faxian1" /> <ImageView android:id="@+id/daohang" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/daohang1" /> <ImageView android:id="@+id/wode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/wode1" /> <ImageView android:id="@+id/lixian" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/lixian1" /> </LinearLayout></LinearLayout>
<?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" android:background="#ddD700" android:orientation="vertical" > <TextView android:id="@+id/e" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="50dp" android:text="我的" android:textSize="40dp" /></LinearLayout>lixianfragment.xml
<?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" android:background="#FFD700" android:orientation="vertical" > <TextView android:id="@+id/e" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="50dp" android:text="离线" android:textSize="40dp" /></LinearLayout>
等等。。。。。。
package com.example.m_93fragmentact;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class tuijianfragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stub\View view = inflater.inflate(R.layout.tuijianfragment, container, false);return view;}}faxianfragment.java
package com.example.m_93fragmentact;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class faxiangragment extends Fragment{@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubView view= inflater.inflate(R.layout.faxianfragment, container, false);return view;}}
Mainactivity的实现
1.声明变量加载五个布局文件 和五个fragment和设置
2.知道什么是动态加载 Fragment
Fragment:Activity片段
a)Fragment的特点:
(1)Fragment作为Activity界面的一部分组成出现
(2)可以在一个Activity中同时出现多个Fragment,一个Fragment亦可在多个Activity中使用。
(3)在Activity运行过程中,可以添加、移除或者替换Fragment(add()、remove()、replace())
(4)Fragment可以响应自己的输入事件,并且有自己的生命周期,当然,它们的生命周期直接被其所属的宿主activity的生命周期影响。只有当Activity处于活动状态时,程序员可通过方法独立的操作Fragment.
例如:Android3.0引入Fragment的初衷是为了适应
大屏幕的平台电脑,Framgment简化了大屏幕UI的设计,对UI组件进行分组,模块化管理,可以更方便地运行过程中动态更新Activity的用户界面,新闻浏览界面,该界面需要屏幕左边显示新闻列表,并在屏幕右边显示新闻内容。此时就可以再Activity中显示两个并排的Fragment,左边的Fragment显示新闻列表,右边的Fragment显示新闻内容。如果需要在正常尺寸的手机屏幕上运行该应用,可以改为使用两个Activity,ActivityA包含FragmentA,ActivityB包含FragmentB.
b)使用:
1、建立Fragment:创建类继承Fragment或其子类
2、实现相关的回调函数
通常, 可以实现如下的生命周期方法:onCreate():当创建fragment时, 系统调用该方法.
在实现代码中,应当初始化想要在fragment中保持的必要组件, 当fragment被暂停或者停止
后可以恢复.
onCreateView():fragment第一次绘制它的用户界面的时候,系统会调用此方法. 为了绘制fragment的UI,此方法必须返回一个View,这个view是你的fragment布局的根view.如果fragment不提供UI,可以返回null.
onPause():用户将要离开fragment时,系统调用这个方法作为第一个指示(然而它不总是意味着fragment将被销毁), 在当前用户会话结束之前,通常应当在这里提交任何应该持久化的变化(因为用户有可能不会返回)
onAttach():fragment和activity建立关系,只是一种约定
3、将Fragment加入宿主Activity
可以使用一下两种方式实现:
(1)在布局文件中配置:
<fragment
android:name="Fragment的className"
android:id="@+id/frag"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
(2)通过Activity的FragmentManager实现
步骤:
1)获取FragmentManager对象
2)开启一个事务:beginTransaction()
3)调用add()添加Fragment对象
remove()删除Fragment对象
replace()替换Fragment对象
4)可以调用addToBackStack(),
将事务添加到一个fragment事务的backstack.
这个back stack由activity管理, 并允许用户通过按下
BACK按键返回到前一个fragment状态.
5)提交事务commit();
4.Fragment与Activity通信
Fragment可以通过getActivity()获取其宿主Activty的实例
Activity可以通过FragmentManager的findFragmentById()获取Fragment实例。
只要将Fragment装载进去就是Activity的一部分,获取控件和之前的方式一致。
5.Fragment的生命周期
与Activity的生命周期很类似,分为:活动状态,暂停状态,停止状态,销毁状态
onAttach():当Activity与Fragment发生关联时调用
onCreate():创建Fragment时被回调
onCreateView():创建或者绘制该Fragment的View组件时回调该方法,
Fragment将会显示该方法返回的View组件.
onActivityCreated():当Fragment所在的Activity的onCreate方法返回值回调该方法。
onStart():启动Fragment时被回调
onResume():恢复Fragment时被调用,onStart方法后一定会回调该方法
onPause():暂停Fragment时被调用
onStop():停止Fragment时被调用
onDestoryView():当该Fragment被移除时回调,
与oncreateView相对应。
onDestory():销毁Fragment时被回调
onDetach():与onAttach相对应,当该Fragment与Activity关联被取消时回调,被替换完成时回调该方法,
onDestory方法后一定回调该方法。
6.为Activity创建事件回调函数
在一些情况下, 可能需要一个fragment与activity分享事件.
一个好的方法是在fragment中定义一个回调的interface,并要求宿主activity实现它.
并且在Fragment的onAttach()方法中获取该Activity的实例。
activity通过interface接收到该回调,必要时它可以和在
layout中的其他fragment分享信息
FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();tuijian.setImageResource(R.drawable.tuijian2);fragmentTransaction.add(R.id.fl, new tuijianfragment());fragmentTransaction.commit();
3.声明全局变量加载五个图片,根据图片来选择跳转的fragment占位区,点击图片颜色会变
ImageView wode;ImageView tuijian;ImageView lixian;ImageView daohang;ImageView faxian;/* * 1.声明变量加载五个布局文件 2.动态加载 Fragment * 管理者fragmentmanger,功能fragmenttrannsaction,管理者提供权限给功能 * 3.根据图片来选择跳转的fragment占位区,点击图片颜色会变 * 4.设置一个内部类来继承接口OnClickListener来实现方法onClick,在方法里写点击事件 * 5.设置一个方法设置进入程序的初始位置在推荐里面 */// 管理者fragmentmanger,功能fragmenttrannsactionwode = (ImageView) findViewById(R.id.wode);tuijian = (ImageView) findViewById(R.id.tuijian);lixian = (ImageView) findViewById(R.id.lixian);daohang = (ImageView) findViewById(R.id.daohang);faxian = (ImageView) findViewById(R.id.faxian);tuijian.setOnClickListener(new MyOnClick());wode.setOnClickListener(new MyOnClick());lixian.setOnClickListener(new MyOnClick());faxian.setOnClickListener(new MyOnClick());daohang.setOnClickListener(new MyOnClick());
4.设置一个内部类来继承接口OnClickListener来实现点击方法onClick,在方法里写点击事件
5. 在内部类里面设置俩个方法
private void clear() {// TODO Auto-generated method stubtuijian.setImageResource(R.drawable.tuijian1);wode.setImageResource(R.drawable.wode1);faxian.setImageResource(R.drawable.faxian1);daohang.setImageResource(R.drawable.daohang1);lixian.setImageResource(R.drawable.lixian1);}void selectfragment(int i) {FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();switch (i) {case 0:tuijian.setImageResource(R.drawable.tuijian2);fragmentTransaction.replace(R.id.fl, new tuijianfragment());break;case 1:faxian.setImageResource(R.drawable.faxian2);fragmentTransaction.replace(R.id.fl, new faxiangragment());break;case 2:daohang.setImageResource(R.drawable.daohang2);fragmentTransaction.replace(R.id.fl, new daohangfragment());break;case 3:wode.setImageResource(R.drawable.wode2);fragmentTransaction.replace(R.id.fl, new wodefragment());break;case 4:lixian.setImageResource(R.drawable.lixian2);fragmentTransaction.replace(R.id.fl, new lixianfragment());break;}fragmentTransaction.commit();}
6.实现内部类的方法
@Overridepublic void onClick(View v) {// TODO Auto-generated method stubclear();if (v == tuijian) {selectfragment(0);}if (v == wode) {selectfragment(3);}if (v == lixian) {selectfragment(4);}if (v == daohang) {selectfragment(2);}if (v == faxian) {selectfragment(1);}}
7.在内部类外面设置一个方法设置进入程序的初始位置在推荐里面
private void moren() {// TODO Auto-generated method stubFragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();tuijian.setImageResource(R.drawable.tuijian2);fragmentTransaction.add(R.id.fl, new tuijianfragment());fragmentTransaction.commit();}
全部代码
package com.example.m_93fragmentact;import android.app.Activity;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;public class MainActivity extends FragmentActivity {ImageView wode;ImageView tuijian;ImageView lixian;ImageView daohang;ImageView faxian;/* * 1.声明变量加载五个布局文件 2.动态加载 Fragment * 管理者fragmentmanger,功能fragmenttrannsaction,管理者提供权限给功能 * 3.根据图片来选择跳转的fragment占位区,点击图片颜色会变 * 4.设置一个内部类来继承接口OnClickListener来实现方法onClick,在方法里写点击事件 * 5.设置一个方法设置进入程序的初始位置在推荐里面 */@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 管理者fragmentmanger,功能fragmenttrannsactionwode = (ImageView) findViewById(R.id.wode);tuijian = (ImageView) findViewById(R.id.tuijian);lixian = (ImageView) findViewById(R.id.lixian);daohang = (ImageView) findViewById(R.id.daohang);faxian = (ImageView) findViewById(R.id.faxian);tuijian.setOnClickListener(new MyOnClick());wode.setOnClickListener(new MyOnClick());lixian.setOnClickListener(new MyOnClick());faxian.setOnClickListener(new MyOnClick());daohang.setOnClickListener(new MyOnClick());moren();}private void moren() {// TODO Auto-generated method stubFragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();tuijian.setImageResource(R.drawable.tuijian2);fragmentTransaction.add(R.id.fl, new tuijianfragment());fragmentTransaction.commit();}class MyOnClick implements OnClickListener {private void clear() {// TODO Auto-generated method stubtuijian.setImageResource(R.drawable.tuijian1);wode.setImageResource(R.drawable.wode1);faxian.setImageResource(R.drawable.faxian1);daohang.setImageResource(R.drawable.daohang1);lixian.setImageResource(R.drawable.lixian1);}void selectfragment(int i) {FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();switch (i) {case 0:tuijian.setImageResource(R.drawable.tuijian2);fragmentTransaction.replace(R.id.fl, new tuijianfragment());break;case 1:faxian.setImageResource(R.drawable.faxian2);fragmentTransaction.replace(R.id.fl, new faxiangragment());break;case 2:daohang.setImageResource(R.drawable.daohang2);fragmentTransaction.replace(R.id.fl, new daohangfragment());break;case 3:wode.setImageResource(R.drawable.wode2);fragmentTransaction.replace(R.id.fl, new wodefragment());break;case 4:lixian.setImageResource(R.drawable.lixian2);fragmentTransaction.replace(R.id.fl, new lixianfragment());break;}fragmentTransaction.commit();}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubclear();if (v == tuijian) {selectfragment(0);}if (v == wode) {selectfragment(3);}if (v == lixian) {selectfragment(4);}if (v == daohang) {selectfragment(2);}if (v == faxian) {selectfragment(1);}}}}
- android (二) -fragment 的动态加载
- android Fragment动态加载的使用详解
- Android之Fragment(二):动态加载碎片
- Android中的Fragment——02(Fragment的动态加载)
- Fragment的动态加载
- Android-动态加载和静态加载Fragment
- Fragment:碎片的动态加载
- Fragment的动态加载问题
- 动态加载Fragment的坑
- 【Android】 Viewpager+Fragment实现滑动图片的动态加载
- FragmentTabHost类实现android中Fragment的动态加载
- Android动态加载布局(fragment限定符的使用)
- Android——Fragment(碎片)的动态加载方式....
- Android中Fragment的动态加载和双屏切换问题
- android动态加载(二)
- android 静态加载Fragment和动态加载Fragment
- FragMent的静态加载和动态加载
- 【Fragment使用】(二)Android之取消ViewPage+Fragment的预加载
- linux应用软件安装包类型及安装介绍
- 几款好用的Tooltips 提示框插件
- 在HTML中加载视频不播放怎么办
- 数据结构与算法(C语言版)__归并排序
- IntellJ Idea工具+Maven 创建Web项目
- android (二) -fragment 的动态加载
- Caffe学习系列(9):运行caffe自带的两个简单例子
- C++构造函数/复制构造函数(超容易理解版)
- C语言-结构体-1887 候选人得票统计
- UML类图常见的几种关系
- EasyUI的引入和使用
- Linux投石问路
- 图像的点运算
- 直播