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

Android开发中如何实现外部其他Activity类与指定fragment碎片的相互跳转

2016-10-13 08:49 417 查看
先说一下这个问题产生的背景
Activity A中有四个fragment,分别是 a b c d,默认显示的是fragment a。在开发过程中,fragment d中需要和外部Activity进行跳转,将这个外部Activity命名为B吧...
我需要从d中跳转到B中,完成一些设置,然后再从B中的返回按钮回到d。但是使用startActivity()方法的结果是:可以实现从d到B的跳转,但是从B跳到d出现了问题。
网上搜索了一下相关问题的解决方案(博文)
方案一:
要考虑fragment的复用,必须要降低fragment和activity之间的耦合,就是说fragment不应该直接影响到其他的fragment,也不应该直接和其他的外部activity进行联系。fragment所在的activity应当起到一个中间桥梁的作用,负责和外部的activity联系。这位博主给出了两种解决方法。下面是他的代码
FragmentOne

?
FragmentTwo

?
下面是Activity的

?
附上原文链接
方案一的做法我觉得是最清晰的,但是不适合我现在做的项目,因为我负责的模块不包括我写的fragment所在的activity,我不能修改那个activity...所以这个方案被pass

方案二:
和方案一类似,利用intent附加参数的方式,在fragment所在的activity中判断一下intent的附加参数,从而设置显示哪个fragment,这个比方案一要简单明了一些。大概思路如下

你可以在你startactivity的地方,对intent加入一个参数,例如,intert.putExtra("fragid",1);然后再你的fragment的主activity中的oncreate或者Onresume函数中获得这个id,例如int id = intert.getIntegerExtra("fragid",-1);然后根据这个id跳转即可

if(id > 0) {

if(id == 目标id) myfragment.setvisible(true);

}

用类似方法即可

比较简单,但是也不适用我的情况,理由同方案一。

方案三:
我查了一下Fragment和Acitvity的生命周期,没啥头绪。突然看到了startActivityForResult()这个方法,结合其他的关键字一搜索,还真找到了相关的东西,下面是原文。

最近在一个项目中,遇到了一种情况,即fragment中在开启一个新的activity的时候调用startactivityResult()。我们都知道在执行完那个新创建的activity后,会回来执行fragment或fragment所在的activity的onResultActivity()函数。但是究竟执行谁的呢?或者先执行谁?

首先应该明确的是在fragment中,也是可以定义onResultActivity()函数。我们先来重新定义一下这个场景。activity A创建了fragment B,在fragment B中用startactivityResult()函数跳转到activity C。

首先,肯定不会执行activity C中的onResultActivity()函数。

其次,首先肯定会去执行activity A中的onActivityResult()函数,不管你在fragment B中是用的getactivity().startActivity(),还是直接使用startActivityForResult()。

而且,如果你重写了activity A的onActivityResult方法

而没有super.onActiivtyResult(),那么你在fragment B里的onActivityResult不会被调用。因为super.onActiivtyResult()里面会去找当前activity A中的onActivityResult(),并不去调用fragment 的onActiivtyResult。

这个方案只需要修改我的fragment d和跳转的Activity B,不需要修改Activity A,符合我的需要~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐