`
lj_gzy2014
  • 浏览: 18225 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

fragment的静态加载与动态加载

 
阅读更多

                为什么要使用Fragment就不再多说了,网上有很多介绍,Fragment相对于Activity更灵活。为什么呢?Fragment与Activity有什么联系与区别呢?如果说Activity是一个大箱子的话,Fragment就是大箱子里面分装东西的小盒子,这样很容易理解东西分装在小盒子里更容易替换或更改,界面改变与设计也就更加灵活。这里就重点谈一下Fragment的入门使用动态加载与静态加载。

               静态加载

               特点:Fragment直接嵌入到Activity的xml文件中,这种方式使用fragment代码量少,但是灵活度低。

               如下:直接在Activity的xml文件中嵌入MyFragment,然后对MyFragment进行设计,这里也可以嵌入多个,以一个为例。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragmentContainer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
	<fragment 
	    android:id="@+id/MyFragment"
	    android:name="com.example.learningtest1_fragment.MyFragment"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    />
</FrameLayout>

 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"
    android:orientation="vertical" >
    <TextView 
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <Button 
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="button"/>

</LinearLayout>

 细心地同学可能发现了一个问题,这两个xml文件,Actvity的xml文件中嵌入fragment,fragment的xml文件控制界面控件排版,那么二者的联系点在哪?也就是说activtiy怎么知道加载哪个fragment呢?注意activity中这一行 android:name="com.example.learningtest1_fragment.MyFragment"。没错就是根据类名来唯一标识这种联系的。很明显,我们还需要一个MyFragment的类来作为纽带。

package com.example.learningtest1_fragment;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

@SuppressLint("NewApi")
public class MyFragment extends Fragment{
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		/**
		 * resource:需要加载的布局文件
		 * root:加载layout的父viewgroup的
		 * false:不返回父viewgroup
		 */
		View view= inflater.inflate(R.layout.myfragment, container, false);
		TextView tv=(TextView)view.findViewById(R.id.text1);
		tv.setText("静态加载fragment");
		return view;
	}
}

            如此,在Activity显示的时候,fragment中的视图就会显示在界面上。

 

       动态加载

  特点:不在Activity的xml中嵌入,而是在代码中使用FragmentManger控制加载。这种方式灵活度高,可以通过代码替换、增加、移除fragment,但是代价就是大量代码用于加载控制。

同样,创建一个类MyFragmnet2

package com.example.learningtest1_fragment;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

@SuppressLint("NewApi")
public class MyFragment2 extends android.app.Fragment{
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		/**
		 * resource:需要加载的布局文件
		 * root:加载layout的父viewgroup的
		 * false:不返回父viewgroup
		 */
		View view= inflater.inflate(R.layout.myfragment2, container, false);
		TextView tv=(TextView)view.findViewById(R.id.text1);
		tv.setText("动态加载fragment");
		return view;
	}
}

 

其对应的Fragmnet2.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:orientation="vertical" >
     <TextView 
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <Button 
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="动态加载按钮"/>

</LinearLayout>
 在代码中控制fragment的加载
 FragmentManager fm=getFragmentManager();
					    android.app.Fragment frame2=new MyFragment2();
                         android.app.FragmentTransaction	    ssss=fm.beginTransaction();
					    ssss.add(R.id.myframe, frame2);
				        ssss.commit();
 需要注意的是我们要为主Activity的布局加上id,以便于在加载fragment时找到相应的位置
如:
<LinearLayout 
    android:id="@+id/myframe"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <TextView android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="abcdrffff"/>
</LinearLayout>
 而在动态加载时就用到了id  myframe:ssss.add(R.id.myframe, frame2);
至此,想必动态加载你也有了一个前后逻辑框架了吧!如果没看太懂,可以下载源码,对照着看。

 

 

分享到:
评论

相关推荐

    Fragment动态加载和静态加载

    动态加载与静态加载的区别** - **初始化时机**:静态加载在Activity启动时自动完成,而动态加载在运行时按需进行。 - **灵活性**:动态加载提供更大的灵活性,可以在运行时根据用户行为或数据变化添加、删除或替换...

    Fragment静态加载

    二、Fragment静态加载步骤 1. 创建Fragment类:首先,你需要创建一个继承自Fragment的类,并实现其生命周期方法。 2. 布局设计:为Fragment创建对应的布局文件,如fragment_layout.xml。 3. XML布局添加:在需要...

    Android 静态加载fragment

    静态加载Fragment是指在布局XML文件中定义并添加Fragment,与动态加载(通过编程方式添加)相比,静态加载更简单且适用于不频繁变化的界面部分。下面将详细介绍Android静态加载Fragment的相关知识点。 首先,我们...

    静态加载fragment示例源码

    静态加载Fragment是指在布局XML文件中预先定义并添加Fragment的方式,与动态加载(通过编程方式添加)相对。下面我们将深入探讨静态加载Fragment的概念、优势、使用步骤以及相关源码分析。 首先,理解Fragment的...

    fragment设计哲理、静态、动态加载

    在静态加载中,Fragment在XML布局文件中被直接声明。开发者在Activity的布局文件中定义Fragment的占位符,并在Activity的onCreate()方法中通过FragmentManager和FragmentTransaction将Fragment添加到Activity中。...

    android的fragment动态加载

    - 动态加载意味着在运行时根据需要添加、替换或移除Fragment,而不是在布局XML文件中静态定义。 - 这种灵活性有助于实现响应式界面,适应不同屏幕尺寸和用户需求。 3. **添加Fragment**: - 使用`...

    dynamic-fragment动态加载fragment

    动态加载Fragment主要是指在运行时根据需要创建、添加、替换或移除Fragment,这对于应对不同屏幕尺寸和方向变化(如横竖屏切换)的应用设计尤为关键。本篇文章将深入探讨“dynamic-fragment动态加载fragment”的概念...

    fragment静态动态两种用法

    总的来说,理解和掌握Fragment的静态与动态用法是Android开发中必不可少的技能,它们可以帮助开发者构建出适应多种设备和用户需求的复杂应用。通过合理地组合和使用这两种方式,可以提升应用的可维护性和用户体验。

    Android应用开发中Fragment的静态加载与动态加载实例

    Fragment的静态加载与动态加载是两种不同的实现方式,它们各自有不同的应用场景和优势。 一、Fragment的静态加载 静态加载是指在XML布局文件中直接定义Fragment,即将Fragment作为Activity布局的一部分预先加载。...

    静态Fragment调用示例

    静态Fragment是指在布局XML文件中定义并添加到Activity中的Fragment,与动态编程方式(通过Java代码添加)相对。本示例将详细介绍如何在Android应用中使用静态Fragment。 首先,创建一个新的Android项目,确保在`...

    fragment静态应用的一个Demo

    这个"fragment静态应用的一个Demo"提供了学习Fragment基础知识的良好起点,尽管没有涉及动态添加和管理Fragment,但对初学者来说,理解和掌握静态使用已经足够打下坚实的基础。通过进一步学习,开发者可以熟练地运用...

    xamarin android静态加载fragment

    静态加载Fragment是指在XML布局文件中直接定义Fragment,而不是在运行时通过代码动态添加。这通常适用于Fragment在整个Activity生命周期中都存在的场景。 1. **在XML布局文件中声明Fragment** 在你的activity布局...

    实现静态、动态、添加、删除、隐藏、显示、替换Fragment事件

    以下是对"实现静态、动态、添加、删除、隐藏、显示、替换Fragment事件"这一主题的详细解释: 1. **静态Fragment**: 静态Fragment是在XML布局文件中定义的。在`&lt;fragment&gt;`标签中指定Fragment的类名和属性,例如:...

    Android碎片fragment实现静态加载的实例代码

    在本文中,我们将主要介绍如何实现 Android 碎片的静态加载,首先我们需要继承 FragmentActivity 类,然后在活动中加载碎片,使用 setContentView() 方法将碎片添加到活动中。 在创建碎片时,我们需要继承 ...

    Android中在xml中静态添加Fragment

    对于需要动态加载或替换的Fragment,可以考虑使用`FragmentManager`的`beginTransaction()`方法进行添加和管理。 总之,通过在XML布局文件中静态添加Fragment,我们可以更方便地构建复杂的界面结构,同时保持代码的...

    android fragment 动态加载

    动态加载Fragment是指在程序运行时根据需要创建并添加到Activity中的过程,而不是在布局XML文件中静态定义。这种方式增加了应用的灵活性,使得我们可以根据用户行为或特定条件来动态显示或隐藏Fragment。 Android ...

    Android Fragment的静态注册和动态注册创建步骤

    静态注册是 Fragment 创建的一种方式,即在布局文件中直接定义 Fragment 的视图资源,然后在 Activity 中加载该布局文件。下面是静态注册的步骤: 1. 创建一个 StaticFragment.java 文件,继承 Fragment 类。 2. ...

    动态加载fragment

    动态加载Fragment是指在运行时根据需求创建并添加Fragment到Activity中的过程,而不是在XML布局文件中静态声明。这种技术在实现复杂的用户界面和模块化设计时特别有用。下面我们将深入探讨动态加载Fragment的概念、...

Global site tag (gtag.js) - Google Analytics