安卓中有什么方法能使fragment重走生命周期
1个回答
2017-06-06
展开全部
在使用fragment时首先要知道fragment的生命周期,我们能在生命周期方法中做什么操作
onAttch(Activity activity):这个方法是在fragment与activity关联之后调用,我们能在这个方法中获取这个关联的activity的实例。但是当你的sdk更新到android6.0(api-23)是就会显示这个方法是过时的,使用onAttach(Context context)这个方法代替,但在看fragment的生命周期时,这个方法好像不调用,所以你获取的Context是null
onCreate:这个方法是在fragment初始化的时候调用,我们通常在这个方法中使用getArgument获取activity传来的初始化fragment的参数。
注意:在 这个方法中我们不能获取activity中的控件,下面的这段代码是在fragment的onCreate中的,你发现activity不是空,但是text是null。因为,这是activity的onCreate还没有执行完,即activity还没有创建完,要想获取activity相关的资源应该在onActivityCreated中获取。
[java] view plain copy
MainActivity activity=(MainActivity) getActivity();//activity不是null
TextView text=activity.findViewById(R.id.textview);//text是null
onCreateView:这个方法中我们主要是通过布局填充器获取fragment布局。我们在这个方法中通过view.findViewById初始化fragment中的控件,
[java] view plain copy
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view=inflater.inflate(R.layout.text_content, null);//获取布局
text=(TextView) view.findViewById(R.id.textview);//初始化fragment的控件
return view;
}
onActivityCreated:这个方法是在activity的onCreate方法执行完执行这个方法,通知fragment,关联的activity的onCreate方法执行完了,即activity创建完了,可以在这个方法中获取activity中的资源。例如下面,可以获取activity布局中的TextView控件
[java] view plain copy
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TextView text=getActivity().findViewById(R.id.textview);//获取activity布局中的TextView控件
}
onStart:这个是在activity的onstart执行完立即执行,这个方法执行完fragment界面就显示出来了,但是现在还没有获取焦点,用户是不能操作。
onResume:这个方法是在activity的onResume方法执行完立即执行,此时fragment的获取了界面,用户可以操作。
onPause:fragment失去焦点,此时用户是不能操作的,执行完立即执行activity的onPause方法。
onStop:fragment不可见,执行完立即执行activity的onStop方法。
onDestroyView:在onCreateView中创建的fragment视图会被销毁。Fragment的视图被回收。
onDestroy:当这个fragment不再使用时调用。需要注意的是,它即使经过了onDestroy()阶段,但仍然能从Activity中找到,因为它还没有Detach
onDetach:fragment与activity解除关联,fragment的所有的资源都被回收。
onAttch(Activity activity):这个方法是在fragment与activity关联之后调用,我们能在这个方法中获取这个关联的activity的实例。但是当你的sdk更新到android6.0(api-23)是就会显示这个方法是过时的,使用onAttach(Context context)这个方法代替,但在看fragment的生命周期时,这个方法好像不调用,所以你获取的Context是null
onCreate:这个方法是在fragment初始化的时候调用,我们通常在这个方法中使用getArgument获取activity传来的初始化fragment的参数。
注意:在 这个方法中我们不能获取activity中的控件,下面的这段代码是在fragment的onCreate中的,你发现activity不是空,但是text是null。因为,这是activity的onCreate还没有执行完,即activity还没有创建完,要想获取activity相关的资源应该在onActivityCreated中获取。
[java] view plain copy
MainActivity activity=(MainActivity) getActivity();//activity不是null
TextView text=activity.findViewById(R.id.textview);//text是null
onCreateView:这个方法中我们主要是通过布局填充器获取fragment布局。我们在这个方法中通过view.findViewById初始化fragment中的控件,
[java] view plain copy
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view=inflater.inflate(R.layout.text_content, null);//获取布局
text=(TextView) view.findViewById(R.id.textview);//初始化fragment的控件
return view;
}
onActivityCreated:这个方法是在activity的onCreate方法执行完执行这个方法,通知fragment,关联的activity的onCreate方法执行完了,即activity创建完了,可以在这个方法中获取activity中的资源。例如下面,可以获取activity布局中的TextView控件
[java] view plain copy
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TextView text=getActivity().findViewById(R.id.textview);//获取activity布局中的TextView控件
}
onStart:这个是在activity的onstart执行完立即执行,这个方法执行完fragment界面就显示出来了,但是现在还没有获取焦点,用户是不能操作。
onResume:这个方法是在activity的onResume方法执行完立即执行,此时fragment的获取了界面,用户可以操作。
onPause:fragment失去焦点,此时用户是不能操作的,执行完立即执行activity的onPause方法。
onStop:fragment不可见,执行完立即执行activity的onStop方法。
onDestroyView:在onCreateView中创建的fragment视图会被销毁。Fragment的视图被回收。
onDestroy:当这个fragment不再使用时调用。需要注意的是,它即使经过了onDestroy()阶段,但仍然能从Activity中找到,因为它还没有Detach
onDetach:fragment与activity解除关联,fragment的所有的资源都被回收。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询