Fragment用法简述

Fragment,碎片,与activity有很大的相似性,可以认为是迷你版的activity。

以下是使用Fragment的方法以及要注意的地方。

一、Fragment的创建

首先,你想使用Fragment碎片,你要先创建一个Fragment。

创建Fragment分两步实现:

(1)创建一个布局文件,可以是一个很简单的布局,如下:

布局名称为:

left_fragment.xml

<?xml version="1.0" encoding="UTF-8"?>
<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:orientation="vertical"
    >
        <Button 
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="测试按钮"
            />
    </LinearLayout>

(2)在工程中新建一个.java文件,该文件继承Fragment并加载上方的布局文件,如下:

文件名:

LeftFragment.java

package com.example.fragmentfirst;

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

public class LeftFragment extends Fragment  {

	public LeftFragment() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view=inflater.inflate(R.layout.left_fragment, container, false);
		return view;
		
	}
 
}

二、Fragment如何在activity中使用

如果说,要在Fragment中使用activity中的方法等,很简单,只需要用getActivity()就可以引用到;那么如何在Activity中使用Fragment中的方法和熟悉呢?

举例如下:

新建一个android工程,里面有默认的MainActivity.java界面以及对应的布局文件。

那么如何使用Fragment以及其中的方法呢?

首先,activity需要添加Fragment,如何添加呢?

有两种方法,动态添加和静态添加。

(1)静态添加:

在布局文件中activity_main.xml中,添加fragment标签,标签的name是需要注意的地方,要使用全路径名,如:

com.example.fragmentfirst.LeftFragment

<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:orientation="horizontal"
    tools:context=".MainActivity" >

    <fragment 
        android:id="@+id/left"
        android:name="com.example.fragmentfirst.LeftFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        />
    <FrameLayout 
        android:id="@+id/f1"
         android:layout_width="match_parent"
        android:layout_height="match_parent"
          android:layout_weight="1"
        >
    </FrameLayout>
</LinearLayout>
这样就静态的将fragment添加到activity中了,运行程序,可以看到效果。

这里还有个要注意的地方,在LinearLayout布局中,又使用了一个FrameLayout布局。这个布局主要是为后续提到的动态添加做准备的。

(2)动态添加:

动态添加,就是在代码中做添加操作。

动态添加很需要注意的是布局文件。我们的布局文件还是如上方一样。有个空的FrameLayout布局,这个布局是作为一个容器使用的,用于显示新增或者替换后的碎片。

如果不用这个布局容器,会出现后续替换的碎片不能完全覆盖上一个碎片,或者重叠现象。

我们在MainActivity.java中添加如下代码:

        OtherFragment otherFragment=new OtherFragment();
        FragmentManager fragmentManager=getFragmentManager();
        FragmentTransaction fTransaction=fragmentManager.beginTransaction();
        fTransaction.add(R.id.f1, otherFragment);
        fTransaction.addToBackStack(null);
        fTransaction.commit();

其中的OtherFragment是仿LeftFragment定义的一个.java文件。

对于动态添加的几个类,我们做如下理解:

FragmentManager:Fragment的管理类,这个类的实例,可以通过系统提供的getFragmentManager()方法来得到;

FragmentTransaction:这个是Fragment的事物类,用于处理Fragment的添加、替换、删除操作,用管理类的beginTransaction方法得到实例;

fTransaction.add(R.id.f1, otherFragment):这个是添加碎片的实际操作。第一个参数,用的是布局FrameLayout的id(如果不用该布局容器,有可能造成重叠),第二个参数是想要添加的碎片。

 fTransaction.addToBackStack(null):这个是为了把被替换前的碎片或者说是上一个碎片,放入到栈中,以便按回退键的时候,能退到上一个碎片上。

 fTransaction.commit():这个就是把事物提交。

通过上面的两个步骤,我们已经可以使用fragment了。

三、Activity中使用Fragment中的控件

在activity中我们如果要得到与之关联的fragment的控件,该如何操作?

有两种办法:

(1)findFragmentById(R.id.xx)

这个是通过查找系统生成的id的方式来查找的,如我在LeftFragment中定义了一个Button,要在activity中使用:

 

 Button button=(Button) ((LeftFragment)getFragmentManager().findFragmentById(R.id.left)).getView().findViewById(R.id.button);


    

(2)findFragmentByTag(tagString)

这个是通过查找标签的形式来得到碎片以及上面的控件。需要这些碎片已经存在于栈中,如果碎片没有存于栈中,可如下操作:

       

 FragmentManager fragmentManager=getFragmentManager();
        
        LeftFragment leftFragment1=(LeftFragment)fragmentManager.findFragmentByTag(tagString);
        if(leftFragment1==null)
        {
        	leftFragment1=new LeftFragment();
        	FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
        	fragmentTransaction.add(leftFragment1, tagString);
        	fragmentTransaction.commit();
        }

个人来说,使用第一种方式较多。

OK,以上是记录的简述,仅供参考。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值