Fragment应该在哪个方法中获取控件并初始化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fragment应该在哪个方法中获取控件并初始化相关的知识,希望对你有一定的参考价值。

应该在onCreateView 这个方法中初始化
因为这个方法,要求你返回一个创建好的View控件
那么你创建这个view的时候,就可以初始化里面的所有控件了
参考技术A 应该在onCreateView 这个方法中初始化 因为这个方法,要求你返回一个创建好的View控件 那么你创建这个view的时候,就可以初始化里面的所有控件了 参考技术B 不能在onCreate函数中获取控件,以为fragment还没有start,你可以在onStart函数中获取:

@Override
protected void onStart()
  super.onStart();
  View view = this.findViewById(R.id.btnTest);
  view.setOnClickListener(new android.view.View.OnClickListener()
  public void onClick(android.view.View v)
   //TODO...
  
  );


我之前也遇到这样的问题。本回答被提问者和网友采纳

重温Android和Fragment生命周期

重温下Android和Fragment生命周期,理解生命周期方法的作用,什么时候调用,可以做一些什么操作。

1、Android生命周期

1.1 生命周期图

技术图片

1.2 生命周期函数说明

  • onCreate:Activity正在创建,生命周期的第一个方法,需要setContentView加载layout。这里不建议耗时操作,只做layout和控件初始化。此方法传递一个 Bundle 对象,可以获取上一个Activity 的状态。
  • onStart:Activity正在启动,此时Activity已处于可见状态,只是还没有在前台显示,因此无法与用户进行交互,这里也可以初始化控件,但官方推荐在onCreate进行。如果 Activity 转入前台,则后接 onResume,如果 Activity 转入隐藏状态,则后接 onStop。
  • onResume:Activity已在前台可见,可以跟用户进行交互,并且该Activity处于堆栈的顶层,可在此初始化一些资源,后接onPause方法。
  • onPause:跳转到其他activity时调用,此方法中可以做一些数据存储或者动画停止或者资源回收的操作,但不能太耗时,因为android中指定onPause在500ms內没有执行完毕的话就会强制关闭Activity。如果Activity返回前台,则后接onResume,如果Activity转入对用户不可见状态,则后接onStop。
  • onStop:表示Activity即将停止或者完全被覆盖,此时Activity不可见,仅在后台运行,也就是还在内存中,还没有被销毁,可以做一下非耗时操作。如果Activity恢复与用户的交互,则后接onRestart,如果Activity被销毁,则后接onDestroy
  • onRestart:Activity在这时可见,当用户按Home键切换到桌面后又切回来或者从后一个Activity切回前一个Activity就会触发这个方法在,始终后接onStart。
  • onDestory:在Activity被销毁前调用,activity结束(调用finish)或者系统内存不够需销毁activity时调用,可以根据isFinishing()方法区分这两种情形。可做回收工作和最终的资源释放。

    2、Fragment生命周期

    2.1 生命周期图

    技术图片

    2.2 生命周期函数说明

    fragment被创建的时候,经历包含onAttach、onCreate、onCreateView、onActivityCreated方法;fragment对用户可见的时候,经历包含onStart、onResume方法;fragment进入“后台模式”的时候,经历onPause、onStop方法;fragment被销毁了(或者持有它的activity被销毁了),经历包含onPause、onStop、onDestroyView、onDestroy、onDetach方法;并且可用onCreate、onCreateView、onActivityCreated方法Bundle对象保存一个fragment的对象。
  • onAttach:当Fragment与Activity发生关联时调用
  • onCreate:创建Fragment时被回调,经历暂停或停止状态继而恢复后,想保留Fragment的基本组件,则在此进行初始化。
  • onCreateView:首次绘制页面时候调用,在此可以创建View,也可以返回null,这样不建议耗时操作。
  • onActivityCreated:Fragment绑定Activity,在onCreate方法已经执行完成并返回,在该方法内可以进行与Activity交互的UI操作,不能在此之前跟Activity进行交互。
  • onStart:启动 Fragment 时被回调,此时Fragment可见,只是还没有在前台显示,因此无法与用户进行交互
  • onResume:Fragment在前台可见,处于活动状态,用户可与之交互
  • onPause:Fragment处于暂停状态,但依然可见,用户不能与之交互
  • onStop:停止Fragment回调,Fragment完全不可见
  • onDestoryView:销毁与Fragment有关的视图,但未与Activity解除绑定
  • onDestory:销毁 Fragment 时被回调,通常按Back键退出或者Fragment被回收时调用此方法,此后接onDetach
  • onDetach:与onAttach相对应,当Fragment与Activity关联被取消时调用
  • setUserVisibleHint:调用次方法可以设置Fragment可见或者不可见。可以调用getUserVisibleHint()获得Fragment的可见或不可见状态,如果可见则进行懒加载操作

以上是关于Fragment应该在哪个方法中获取控件并初始化的主要内容,如果未能解决你的问题,请参考以下文章

android 怎么在自定义控件中获取控件所在fragment的实例

如何在ViewPager中的各个Fragment间传递数据并刷新Fragment界面

MFC如何知道光标在那个控件上 用哪个函数?谢谢

使用Fragment时如何获取控件Id以及如何跳转

控件获取焦点问题(C#)

如何在activity中获取fragment的控件,然后修改控件的内容,