Android基础之Fragment 相关

本文详细介绍了Fragment的基本概念、创建方法、生命周期及其与Activity之间的交互方式。同时提供了Fragment在Android应用中的两种典型使用场景:静态引用和动态添加,并展示了如何实现Fragment与Activity间的通信。

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

一,Fragment的创建:
1,创建Fragment的XML布局,创建NewsTitleFragment extends Fragment,重写onCreateView()

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.i(TAG,"onCreateView()");
        View view=inflater.inflate(R.layout.fragment_news_title, container, false);

        return view;
    }

2,Fragment的生命周期方法:

   onAttach(Context context)
   
   onCreate(Bundle savedInstanceState)

   onCreateView()

   onActivityCreated()

   onStart()

   onResume()

   onPause()

   onStop()

   onDestroyView()

   onDestroy()

   onDetach()

其与关联Activity生命周期的关系:(在XML中静态引入Fragment的情况)
I/MainActivity: onCreate()
I/NewsTitleFragment: onAttach()
I/NewsTitleFragment: onCreate()
I/NewsTitleFragment: onCreateView()

I/MainActivity: onStart()
I/NewsTitleFragment: onActivityCreated()
I/NewsTitleFragment: onStart()

I/MainActivity: onResume()
I/NewsTitleFragment: onResume()

I/MainActivity: onPause()
I/NewsTitleFragment: onPause()

I/MainActivity: onStop()
I/NewsTitleFragment: onStop()

PS.一般我们说一个Activity或其关联的Fragment要运行到onResume()后才能看见,经调试确认是在onResume()执行完后处于运行状态是可见。

二,Fragment的使用:
1,XML中静态引用,通过name属性

<fragment
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.example.archermind.fragment.NewsTitleFragment"/>

2,code中动态添加:

        NewsContentFragment fragment=new NewsContentFragment();
        FragmentManager fragmentManager=getFragmentManager();
        FragmentTransaction transaction=fragmentManager.beginTransaction();
        transaction.replace(R.id.news_content_fg,fragment);
        transaction.commit();

注意:transaction.replace()会替换之前的fragment,如果存在的话,之前的fragment会执行onPause()->onStop()->onDestroy()被销毁。
可以在transaction.commit()之前调用transaction.addToBackTask(null)让其处于提示状态,之后按Back建会再次显示。

三,Fragment与Activity相互通信
1,Activity操作Fragment:

NewsContentFragment fragment=(NewsContentFragment)getFragmentManager().findFragmentById(R.id.news_content_fg);

2,Fragment操作Activity:

getActivity().findViewById(R.id.news_content_layout)!=null)

注:在Fragment中调用getActivity()可以得到与之关联的Activity实例。通知这也是获得Context对象的方式。
另:findViewById()这个方法不仅仅是View含有,Activity中也含有

@Nullable
public View findViewById(@IdRes int id) {
    return getWindow().findViewById(id);
}

3,Fragment最初是为平板适配而来的,适配方式可以在不同layout文件夹下面创建同名的XML,XML中做各自不同的布局,程序运行时会
根据自身设备的情况去选择加载不同layout下的xml。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值