安卓中有什么方法能使fragment重走生命周期

安卓中有什么方法能使fragment重走生命周期,第1张

在使用fragment时首先要知道fragment的生命周期,我们能在生命周期方法中做什么 *** 作

onAttch(Activity activity):这个方法是在fragment与activity关联之后调用,我们能在这个方法中获取这个关联的activity的实例。但是当你的sdk更新到android60(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=activityfindViewById(Ridtextview);//text是null

onCreateView:这个方法中我们主要是通过布局填充器获取fragment布局。我们在这个方法中通过viewfindViewById初始化fragment中的控件,

[java] view plain copy

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

view=inflaterinflate(Rlayouttext_content, null);//获取布局

text=(TextView) viewfindViewById(Ridtextview);//初始化fragment的控件

return view;

}

onActivityCreated:这个方法是在activity的onCreate方法执行完执行这个方法,通知fragment,关联的activity的onCreate方法执行完了,即activity创建完了,可以在这个方法中获取activity中的资源。例如下面,可以获取activity布局中的TextView控件

[java] view plain copy

@Override

public void onActivityCreated(Bundle savedInstanceState) {

superonActivityCreated(savedInstanceState);

TextView text=getActivity()findViewById(Ridtextview);//获取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的所有的资源都被回收。

如果你的内层窗体是用acitivitygetSupporManager()创建的话,在内层中使用 ((xxxActivity)getContext())getXXXView(),可以获取到你想要的控件,然后在控件中拿到需要的String。或者你可以直接在activity中将string设置为public的变量,这样获取起来更简单。

如果你的内层窗体是最外层用getChildFragmentManager()创建的话,且最外层是fragment,那么你需要用

((xxxFragment)getParentFragment())getXXXView,的方式获取到应的控件

在Fragment里建立工具类对象的时候就把上下文参数传过去,

SearchDevice sDevice = new SearchDevice(getActivity());

工具类运行完代码后,再调用Fragmen里的方法获取控件改变控件状态

public void initWidget(Activity activity)

{

stateTextView = (TextView) activityfindViewById(Ridtext_state);

stateTextViewsetText(SEARCHING_DEVICE);

}

在Fragment中添加一个布局容器,并设置ID,在Activity中findbyview找到后,就可以动态添加了。

代码如下:

<xml version="10"encoding="utf-8">

<LinearLayout xmlns:android="

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<Button

android:id="@+id/first_button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/first_button"/>

<Button

android:id="@+id/second_button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/second_button"/>

<Button

android:id="@+id/third_button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/third_button"/>

</LinearLayout>

可以通过getActivity()来得到FragmentActivity对象,但是建议不要在Fragment中去 *** 作FragmentActivity的东西,建议在FragmentActivity中封装一些方法。

1Fragment是android30引入的新控件,果应用使用在30以下、16及以上的版本,需要引入v4包。

2Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等。

3Fr期方法依赖于Activity的生命周期,例如一个Activity的onPause()的生命周期方法被调用的时候这个Activity中的所有的Fragment的onPause()方法也将被调用。

4FragmentManager提供了对Activity运行时的Fragment的添加、删除、替换的 *** 作。在Activity运行期间可以添加Fragment而不是在XML布局文件中进行定义。如果打算在Activity中改变Fragment的生命过程。如果要执行添加、删除、修改的 *** 作,必须通过FragmentManager的对象获得一个FragmentTransaction对象,通过它的API来执行这些 *** 作。

5两个单独的Fragment之间是不应该进行通信的。应该使用他们所存在的Activity作为沟通的纽带。

从fragment中跳转和从activity中跳转类似,只不过你要先通过fragment的getActivity方法获取到显示这个fragment的activity,具体代码是这样的:

Intent

intent

=

new

Intent();

intentsetActivity(getActivity(),

TargetActivityclass);

startActivity(intent);

//这里用getActivity()startActivity(intent);

如果不返回结果的话,第三行代码没什么区别,如果要返回一个结果的话,可以有类似的两种方法:

//直接从fragment中跳转

startActivityForResult(intent,

REQUEST_CODE);

这种写法接收返回的结果要在fragment中重写onActivityResult()方法;

//从activity中跳转

getActivity()startActivityForResult(intent,

REQUEST_CODE);

这种写法要在Activity中重写onActivityResult()方法。

答:因为对应fragment对应的XML 文件没有载入,导致在导入ID 的时候报ID空指针,不过可以在onViewCreated方法中进行ID 的直接调用,因为onCreateView 在onViewCreated之后执行

以上就是关于安卓中有什么方法能使fragment重走生命周期全部的内容,包括:安卓中有什么方法能使fragment重走生命周期、fragment 多层嵌套时,内部嵌套的某个fragment窗体怎么去获取外部窗体的指定数据、如何改变 Fragment 的 TextView 内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9554685.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存