Fragment带参数启动的坑
来源:互联网 发布:apche怎么使用php 编辑:程序博客网 时间:2024/06/08 07:58
最近在做一个项目。没有什么特别大的功能和难点。但是里面有很多判断和对于程序整个框架的设计有难度。接下来我每一章都总结一下项目中踩到的坑。
这次讲的是Fragment带来的坑
Fragment带参数启动。这个随便百度都能找得到。getter&setter,onActivityResult,Bundle, EventBus, Rxjava等等等等。
以上方法我没用过onActivityResult和rx。所以其他的方法我一个个说一下我踩的坑
首先要知道,Android其实是不建议开发者让Fragment之间相互通信的。具体为啥我也忘了(笑)。
EventBus:
如果用于Fragment和当前Fragment依赖的Activity通信的话还是可以的。如果同一个Activity下,使用同一容器的情况下,如果使用replace来切换Fragment。这样是接收不了信息的。除非使用粘性,但是使用了粘性还得想办法取消,否则新开的Fragment会一直接收前面的Fragment传来的信息。
如果使用hide show进行切换的话,没试过,但是目测应该是可以的。
Bundle:
Bundle的用法是通过根Activity作为中转,从FragmentA跳转到FragmentB的时候,把A的一些数据,通过接口的方式传到Activity实现的接口方法中,并在启动B之前通过SetBundle的方式放到B的单例实例中。
上个代码吧:
这个是B
public class B extends Fragment { String mobile_tel, name; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mobile_tel = getArguments().getString("mobile_tel"); name = getArguments().getString("name"); return view; } B b public static B newInstance(String... params) { if (null == b) { b= new B(); } Bundle arg = new Bundle(); arg.putString("mobile_tel", params[0]); arg.putString("name", params[1]); pc2.setArguments(arg); return b; }}
Activity接口:
String mobile = param[0]; String name = param[1]; b= B.newInstance(mobile, name); showFragment(fm, b, true);
/** * @param fm1 当前fragment * @param fm2 需要show的fragment * @param isAddToBackStack 是否加入退回栈 */ private void showFragment(Fragment fm1, Fragment fm2, boolean isAddToBackStack) { FragmentTransaction ft1 = getFragmentManager().beginTransaction(); if (fm1 != null) { ft1.hide(fm1); if (isAddToBackStack) { ft1.addToBackStack(null); } } if (!fm2.isAdded()) { ft1.add(R.id.infomation_detail, fm2); } else { ft1.show(fm2); } ft1.commit(); }
至于A。。。不用写了吧?就一个接口把参数放进接口方法而已。
Bunlde方法适用于只需要在短时间内启动一次或者用replace来切换Fragment的情况下。
如果带Bundle启动的Fragment需要多次带参数启动的话,这个方法就不合适了。原因。。。。忘了。大概的意思是讲,Bundle启动的Fragment,Bundle只会启动一次,意思是说你这次放的参数是“A”, "B"。下次你再希望把参数放到Bundle里面来启动Fragment的话。Bundle是不干的。
最后 getter&setter:
这个方法看起来好像很不靠谱的样子。但是实际上好用的很。需要带参数多次启动的Fragment用起来毫无压力。怎么用?代码都不用放。
带参数的Fragment启动的是需要哪些参数,先写出来,然后getter&setter,在启动前通过接口获得参数,set进去,然后启动。这就OK了。hide show和replace一样可行。
下一章将会说说Fragment切换的坑。
- Fragment带参数启动的坑
- 带参数的Fragment
- 线程启动带参数的方法
- 线程启动带参数的方法(2)
- c# 启动带参数的多线程方法
- Unity3D启动带参数的exe C#
- gdb 启动带参数的程序
- OD 调试带启动参数的程序
- Windows 启动带参数的exe
- Fragment使用带参数的构造函数遇到的问题
- winfrom 带参数启动
- am 启动带参数
- Unity 带参数启动
- 王学岗Fragment(三)——带参数
- 用快捷方式启动带参数的程序(例如Windbg)
- 进程启动命令行中怎么传递带空格的参数
- C#启动一个带命令行参数的程序
- experiment : 使用OD 调试带启动参数的程序
- struts2 中ActionContext.getContext().getSession().put("","")是什么意思 和HttpSession有什么区别吗?
- C. Voltage Keepsake
- 关于JSONP
- Go语言学习之log包(The way to go)
- 实现一个java web缓存
- Fragment带参数启动的坑
- 浅析智能指针
- android developer tiny share-201704017
- [LeetCode]168. Excel Sheet Column Title(Excel表格列标题)
- 滴滴2016校招测评题(建水库问题)
- c 求字符串内无重复字符的最长子串
- [LeetCode]171. Excel Sheet Column Number(Excel表格列号)
- 【数据结构_堆_1098】堆的判断
- 2017腾讯基础研究岗位面试经历