2、Activity 与 Fragment 之间常见的几种通信方式

2、Activity 与 Fragment 之间常见的几种通信方式,第1张

1、通过intent将值传给即将跳转的activity

或者通过bundle

2、通过startActivityForResult的跳转方式将值传给跳转前的activity

在下面回调中获取传过来的值

在fragment1中通过getSupportFragmentManager()findFragmentByTag()获取fragment2的对象,调用fragment2中的方法将值传过去

Fragment1

Activity中创建fragment,并给fragment指定tag

Fragment2

1、通过setArguments传递bundle,通过getArguments获取bundle

activity

2、通过fragment中的attach()生命周期,将context转为Mainactivity,然后调用MainActivity中的方法

通过在fragment中实现接口的方式,Fragment向Activity传值的步骤 接口回调传递(5部曲)

1fragment中准备回调接口 接口中声明传值的回调方法

2在fragment中定义属性private MyListener myListener

3重写fragment中的onAttach()方法:listener = (MyLisener)getActivity();

4fragment触发事件时回传值

5Activity中实现回调接口 重写回调方法获取回传的值并显示

在MainActivity中:

(待完成)

前面介绍了ViewModel的生命周期,知道了其会在宿主activity或者fragment销毁时被销毁(config change造成的除外);如下图:

但是没有深究其中的原理,虽然这并不影响我们的使用;但是为了知识的完成性,我们最好还是深入分析下其中的原理,同时,一些设计思想还是非常巧妙的,个人觉得是有很借鉴价值的。

首先让我们回顾下ViewModel的获取方式

MyViewModel model = ViewModelProvidersof(this)get(MyViewModelclass);

前面也说过,这其实是从创建的ViewModelProvider中得到ViewModelStore;而ViewModelStore是和宿主实例一一对应的;从ViewModelStore中获取相应classmodel对应的ViewModel实例;因此ViewModel生命周期其实是与ViewModelStore一致的;我们从这里入手进行分析,为什么config change(例如,屏幕旋转)造成的宿主销毁不会影响ViewModel的生命周期呢?

需要分开进行分析;

当ViewModel的宿主是普通的activity或者fragment的时候,需要利用HolderFragment来保证config change时的生命周期,其原理如下

可见;对于normal宿主,会通过holderFragmentFor(activity)返回的HolderFragment来得到ViewModelStore实例;宿主和HolderFragment一一对应;

宿主对应的HolderFragment持有相应的ViewModelStore

主要逻辑都在HolderFragmentManager中;其主要原理是利用了嵌套fragment;需要用到的一些基础知识

参考 >

来源于:Web前端开发之@ 功能 JS 实现原理详解 >

public class MainActivity extends FragmentActivity

{

private ContentFragment mContentFragment ;

@Override

protected void onCreate(Bundle savedInstanceState)

{

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_main);

FragmentManager fm = getSupportFragmentManager();

mContentFragment = (ContentFragment) fmfindFragmentById(Ridid_fragment_container);

if(mContentFragment == null )

{

mContentFragment = new ContentFragment();

fmbeginTransaction()add(Ridid_fragment_container,mContentFragment)commit();

}

}

}

frgment被创建的时候,相关的生命周期,

onAttach(), onCreate(), onCreateView(), onActivityCreated();

fragment对用户可见的时候,相关的生命周期,

onStrat(), onResume(),

fragment进入“后台模式”的时候,相关的生命周期,

onPause(), onStop(),

fragment被销毁的时候,相关的生命周期,

onPause(), onStop(), onDestroyView(), onDestroy(), onDetach()

可用onCreate()、onCreateView()、onActivityCreated()方法Bundle对象保存一个fragment的对象

onAttach():Fragment和Activity相关联时调用,可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。

onCreate():Fragment创建时被调用。

onCreateView():创建Fragment的布局。

onActivityCreated():当Activity完成onCreate时调用。

onStart():当Fragment可见时。

onResume():当Fragment可见,且可交互时调用。

onPause():当Fragment不可交互,但可见时。

onStop():当Fragment不可见时。

onDestroyView():当Fragment的UI从视图结构中移除时调用。

onDestroy():销毁Fragment时

onDetach():当Fragment和Activity解除关联时调用。

以上就是关于2、Activity 与 Fragment 之间常见的几种通信方式全部的内容,包括:2、Activity 与 Fragment 之间常见的几种通信方式、ViewModel相关生命周期的原理分析-之三、@ 功能 JS 实现原理详解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9311626.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存