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,符合我的需要~~~
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
?
?
?
方案一的做法我觉得是最清晰的,但是不适合我现在做的项目,因为我负责的模块不包括我写的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,符合我的需要~~~
相关文章推荐
- Android开发中如何实现外部其他Activity类与指定fragment碎片的相互跳转
- Android开发中如何实现外部其他Activity类与指定fragment碎片的相互跳转
- Android开发关于Activity跳转另一个Activity指定的fragment的解决方法
- android中如何实现进入一个界面不做任何动作过10秒钟自动跳转到其他activity?
- 【Android】安卓开发实战之使用Fragment(碎片)实现底部导航栏效果
- 解决:Android使用自带sqlite开发时,apk中创建的数据库外部的进程是没有权限去读/写的,而且无法如何读取指定目录下的db文件
- 15_09_16 Android 开发 新手如何实现 Activity 的跳转
- 【Android开发技巧】在Activity页面中如何实现Fragment数据的缓加载
- JAVA Eclipse创建Android程序如何实现MainActivity和Fragment相互传递数据
- android中如何实现进入一个界面不做任何动作过10秒钟自动跳转到其他activity?
- JAVA Eclipse创建Android程序如何实现MainActivity和Fragment相互传递数据
- Android 开发中使用Fragment跳转到下一个Fragment(使用add方法),并实现返回键和自定义返回键。
- Android混合开发之Activity类与html页面之间的相互跳转之Android:如何使用addJavaScriptInterface
- Android 程式开发:(十三)特殊碎片 —— 13.2 DialogFragment
- Android开发:如何实现TCP和UDP传输
- Android开发:如何实现TCP和UDP传输
- 如何实现android蓝牙开发 自动配对连接,并不弹出提示框
- Android开发之如何实现日历控件
- Android 程式开发:(十三)特殊碎片 —— 13.2 DialogFragment