Android技术成长之路(Fragment的简单介绍)

本文详细介绍了Fragment的概念、生命周期及其在Android开发中的应用。Fragment是Android应用程序中用于实现多面板用户界面的重要组件,可以理解为Activity的一个模块。文章通过示例展示了如何在Activity中使用布局文件加入Fragment,以及Activity与Fragment之间的通讯方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1概要介绍

一个Fragment代表一个行为或Activity中用户界面的一部分。你能够在一个Activity中组合使用多个Fragment来创建一个多面板的用户界面,并且可以在多个Activity中重用同一个Fragment。你可以把一个Fragment想象成一个Activity的模块,它有自己的生命周期,接受它们自己的输入事件。最常见的Fragment是与tab构成新闻导航页面的内容,往往导航栏下面的正文就是一个Fragment。

2 Fragment的生命周期

实测通过使用Action Bar 对fagment的切换,发现fragment在第一次创建的时候依次调用onCreate()、onCreateView()、onResume()方法:

I/System.out( 7731): it is frgment create

I/System.out( 7731): it is frgmentoncreateview

I/System.out( 7731): it is frgment onresume

而当我切换fragment A到fragment B时,它会先调用onPause()方法,紧接着调用onStop()方法:

I/System.out( 7731): it is frgment onPause

I/System.out( 7731): it is frgment onStop

当我从fragment B重新切换到切换fragment A时,它会重新调用onCreateView()方法,也就是说fragment重新显示的时候会被Activity调用这个方法重画视图,再言之,适配器将被重新加载!然后再调用onResume ()方法:

I/System.out( 7731): it is frgmentoncreateview

I/System.out( 7731): it is frgment onresume

 

3. Fragment的状态

管理Fragment的生命周期有点像管理Activity的生命周期跟Activity一样,Fragment也存在三种状态:

状态    

 

恢复态(Resumed)

这种状态下,Fragment显示在正在运行的Activity中。

暂停态(Paused)

这种状态下,另一个Activity在前台,并且有焦点,但这个Fragment所在的Activity依然是可见的(它前面的Activity是部分透明或没有完全覆盖它)

终止态(Stopped)

这种状态下,Fragment是不可见的,既可以是持有它的Activity已经被终止,也可以是Fragment从Activity中被删除,但被添加到了回退堆栈中。


 


 

 4几种实例应用

4.1通过Activity的布局文件将Fragment加入Activity

你能够像一个视图那样给Fragment指定布局属性。下例说明了给Activity指定两个Fragment的布局文件。

 

 

视图的布局文件分别在leftfragment和rightfragment中编辑,而在主MainActivity中只需要显示主视图就行了。

publicclass TestActivity extendsActivity {

/** Calledwhen the activity is first created. */

@Override

public voidonCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

}

主Activity的布局文件res/layout/main.xml,其中两个fragment的name部分指定了属性对应的就是自定义Fragment类的全名,系统会根据这个调用指定的Fragment的onCreateView()方法来得到这个Fragment的布局,然后加入Activity中。

<?xmlversion="1.0" encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="horizontal">

<fragment

android:id="@+id/left_fragment"

android:name="xhw.test.namespace.LeftFragment"

android:layout_width="match_parent"

android:layout_height="fill_parent"

android:layout_weight="2"/>

<fragment

android:id="@+id/right_fragment"

android:name="xhw.test.namespace.RightFragment"

android:layout_width="match_parent"

android:layout_height="fill_parent"

android:layout_weight="1"/>

</LinearLayout>

4.2Activity与Fragment之间的通讯

这里同样示例通过XML布局文件中静态声明fragment的通讯方法:

1)Fragment能够使用getActivity()方法访问Activity的实例,并且很容易执行如在Activity布局中查找View的任务:

View listView =getActivity().findViewById(R.id.list);

(2)同样Activity通过从FragmentManager中获得的Fragment引用也能够调用Fragment中的方法,使用findFragmentById()或findFragmentByTag()方法获取Fragment引用(只有在main.xml文件中直接声明的fragment可以用),不然会报空指针错误。例如:

ExampleFragment fragment =(ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);

在前面示例1的基础上,打开LeftFragment.java,添加onActivityCreated方法,并处理按钮的点击事件:

@Override

public void onActivityCreated(Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);

Button button = (Button)getActivity().findViewById(R.id.previous_button);

button.setOnClickListener(newOnClickListener() {

@Override

public void onClick(View v) {

TextView textView = (TextView)getActivity().findViewById(R.id.show_message);

Toast.makeText(getActivity(),textView.getText(), Toast.LENGTH_LONG).show();

}

});

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值