Android——Fragment(碎片)的静态加载方式....

在说Fragment的加载方式之前,简单笼统地介绍一下Fragment大概使用。

和Activity一样,每次要出现新的Fragment都需要定义Fragment类(需要继承Fragment类),一个Fragment类需要自己的子布

局layout。

Fragment的加载方式分两种:静态加载和动态加载。

做一个导航来展示静态和动态加载。

这里写图片描述

1、静态加载

先来创建静态加载的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/fg_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <Button 
        android:id="@+id/fg_bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="改变text"
        />
</LinearLayout>

再来创建一个Fragment类,继承自Fragment。

package com.example.fragmenttest;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MyFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        /*
         * resource: Fragment布局文件 
         * root: 加载Layout的父Viewgroup
         * attachToRoot:false,不返回父viewgroup
         */
        View view = inflater.inflate(R.layout.fragment1, container, false);
        TextView tv = (TextView) view.findViewById(R.id.fg_tv);
        tv.setText("静态加载");
        return view;

    }

}

调用其中的oncreateview方法,我们要将layout布局文件转换为视图。

inflater.inflate(resource, root, attachToRoot);

其中代码中把ViewGroup就当作layout布局文件,例如: LinearLayout、RelativeLayout等等。

之前咱们是直接使用findviewById,那是因为我们已经在Activity的oncreate方法中载入了布局文件,这里我们需要获得布局之后

才可以使用这个方法,view就是其布局文件转换的视图。

可以初始化控件并且通过代码设置控件内容。

手机是通过两个Fragment在两个Activity跳转来实现,所以需要再定义一个Activity的布局文件(main2),里面只有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" >

    <fragment
        android:id="@+id/main_fl"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.example.fragmenttest.MyFragment"
        ></fragment>
</LinearLayout>

在Activity的layout中需要声明Fragment,在其标签内必须用name属性指定在layout中实例化的Fragment类(因为一个

Fragment类肯定有一个Fragment布局文件对应它)。

标识Fragment:id、tag两个属性都可以获得唯一标识。

Fragment类做好了以后,我们将它部署在另一个Activity中(其实是Activity加载它的带有Fragment的布局文件(main2),通过布局文件

中对应name的Fragment类来加载的):

package com.example.fragmenttest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity2 extends Activity{
    private Button bt;
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
        bt =(Button) findViewById(R.id.fg_bt);
        tv=(TextView) findViewById(R.id.fg_tv);
        bt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                tv.setText("改变了!");
            }
        });
    }

}

这里主要想说的一点,在大房子Activity中加载了main2的布局文件,是可以直接findviewbyid的,因为在大房子Activity是可以找

到房间Fragment中的控件ID的,在加载房子的布局文件时已经深入到房间的布局文件及控件,直接可以findview,也就是说

Fragment中的布局文件对于Activity本身也是共享它里面的UI控件的。

我们可以通过点击静态加载这个按钮来展示静态加载Fragment效果,按钮在这里使用的是radiogroup:

Mainactivity:

package com.example.fragmenttest;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class MainActivity extends Activity {
    private RadioGroup rg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rg = (RadioGroup) findViewById(R.id.main_rg);
        rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // TODO Auto-generated method stub
                switch (checkedId) {
                case R.id.main_bt:
                    Intent intent=new Intent();
                    intent.setClass(MainActivity.this, MainActivity2.class);
                    startActivity(intent);
                    break;
                case R.id.main_bt1:

                    break;
                case R.id.main_bt2:

                    break;
                case R.id.main_bt3:

                    break;
                default:
                    break;
                }
            }
        });

    }


}

点击后效果图:

这里写图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值