您的位置:首页 > 移动开发 > Android开发

Fragment和Activity之间的通信

2017-04-28 15:08 267 查看
在Activity中调用Fragment中的方法:

LeftFragment leftFragment = (LeftFragment)getSupportFragmentManager().findFragmentById(R.id.left_fragment)
我们调用FragmentManager的findFragmentById()方法,就可以在我们的Activity里得到相应碎片的实例,然后就能轻松的调用碎片里面的方法,传递参数了

在Fragment里调用Activity里的方法:

MainActivity activity = (MainActivity)getActivity();
是不是很简单,这个时候也许你会问fragment和fragment之间可不可以通信?我可以肯定的告诉你,当然可以。

首先在一个fragment中可以得到与它相关联的activity,然后再通过这个活动去获取另外一个fragment的实例。就这么简单。

最后我讲一下Fragment中大家很容易忽略, 但是对用户体验很有用处的方法:addToBackStack();

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.right_layout,fragment);
transaction.addToBackStack(null);
transaction.commit();
这个方法的参数 一般传入null即可。这个方法被调用,意味着将这个fragment加入了一个返回栈,比如一个activity里面需要很多个fragment,根据点击按钮的不同展示不同的fragment ,如果不加这句代码,当你点击back的时候直接退出程序,如果加了,那么点击back键则会返回上一个展示的fragment,直到这个返回栈清空,没有事务,才会退出程序。

我们都知道fragment的生命周期是onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->onpause()->onStop()->onDestroyView()->onDestory()->onDetach()

如果我们加入addToBackStack();那么我们在切换fragment的时候,上一个fragment则会进行onPause->onStop()->onDestoryView(),如果没有加入这个方法,那么上一个fragment进入销毁状态,onDestory()->onDetach()都会执行;如果我们点击Back键返回到上一个fragment,则会从onDestoryView()回到onCreateView()->onActivityCreated()->onStart()->onResume(),但是oncreate()并不会执行,因为我们借助了addToBackStack()使得上一个fragment没有被销毁。

今天就总结到这里吧,有相关问题请给我留言,我们一起探讨。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息