
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 实现原理详解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)