深入浅析 Android Fragment(上篇)
何谓Fragment
Fragment
是Android中一种独立模块的组件,其类似于Activity,可以包含UI界面和交互逻辑,但与Activity不同的是,Fragment是不能单独存在的,它必须依附于Activity才能存在。
Fragment的生命周期
Fragment的生命周期是指Fragment在其创建、运行、销毁的过程中,系统会调用的一组回调函数。Fragment的生命周期包括以下方法:
- onAttach() : 当Fragment与Activity发生关联时调用;
- onCreateView() : 当Fragment的布局需要被实例化时调用;
- onViewCreated() : 当Fragment的布局被实例化并且与Fragment发生关联时调用;
- onActivityCreated() : 当Fragment所在的Activity被启动完成后调用;
- onStart() : 当Fragment被启动时调用;
- onResume() : 当Fragment被恢复时调用;
- onPause() : 当Fragment被暂停时调用;
- onStop() : 当Fragment被停止时调用;
- onDestroyView() : 当Fragment的视图被移除时调用;
- onDestroy() : 当Fragment被销毁时调用;
- onDetach() : 当Fragment与Activity的连接被断开时调用。
Fragment的使用方式
在Activity中引入Fragment,可以通过以下三种方式:
静态添加
静态添加是通过在布局文件中直接声明<fragment>
标签,将Fragment组件和Activity进行绑定。在Activity启动时,Fragment也会一起被实例化。
示例代码:
<fragment
android:id="@+id/fragment_main"
android:name="com.example.FragmentMain"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
动态添加
动态添加是在Activity运行时,通过代码添加Fragment组件,在需要的时候将Fragment添加到Activity中。动态添加的好处在于可以在逻辑处理的过程中动态切换和添加Fragment。
示例代码:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
FragmentMain fragmentMain = new FragmentMain();
transaction.add(R.id.fragment_container, fragmentMain);
transaction.commit();
动态替换
动态替换是将已经添加到Activity中的Fragment替换成其他的Fragment,可以用于在不同的页面间进行快速切换。
示例代码:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
FragmentTransaction.replace(R.id.fragment_container, new FragmentSub());
transaction.commit();
Fragment的通信方式
- 直接调用:在一个Fragment中直接调用其他Fragment的公共方法实现通信;
- Activity作为中介:通过Activity来实现Fragment之间的通信;
- 使用接口回调:让一个Fragment实现一个接口,然后让另一个Fragment在其内部持有该接口的实例,在适当的时候调用该实例的方法完成回调。
示例代码:
// FragmentMain中定义一个接口
public interface OnButtonClick {
void onButtonClick(String string);
}
// FragmentSub中持有该接口的实例,并在需要时调用其方法
private OnButtonClick onButtonClick;
public void setOnButtonClick(OnButtonClick onButtonClick) {
this.onButtonClick = onButtonClick;
}
onButtonClick.onButtonClick("Hello, world!");
// Activity中作为中介,实现OnButtonClick接口,并将实例传递给Fragment
FragmentMain fragmentMain = new FragmentMain();
fragmentMain.setOnButtonClick(new OnButtonClick() {
@Override
public void onButtonClick(String string) {
Log.d(TAG, string);
}
});
FragmentTransaction.replace(R.id.fragment_container, fragmentMain);
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入浅析 Android Fragment(上篇) - Python技术站