Android fragment onHiddenChanged方法详解
2015-08-11 16:47
549 查看
项目中,为了实现不同fragment之间值得传递,首先想到的是利用bundle或者shareprefercnce之类的共享数据机制,当不符合项目需求,有点过于复杂和冗余,就利用网上一位前辈的建议,在主Activity中,创建一个共享的数据变量,在其他fragment中只要获取到这个值就可以得到数据,实现共享,代码如下:
在其他fragment中使用如下语句即可得到该数据:
但重点不在于获取数据,我遇到的困难是这样的,先前的博文有提到我使用了popupwindow作为左侧下拉菜单,为了实现主界面不同fragment的切换,做了一个隐藏和显示的处理,只要已经实例化的fragment类,要用的时候,直接show显示即可,不用的时候hide隐藏起来。又不懂或者不知道如何使用的可以参考我这篇博文:点击打开链接。这样实现之后,我要再fragment
a中的列表点击其中一个列表项,跳转到另一个fragment b中,当然这个列表项的值需要传递到fragment b中,很多人会认为不是直接可以使用你上面的方法可以得到共享的数据吗?
其实难点在于,第一次切换到fragment b中,已经实例化的时候,确实能得到共享的数据,当第二次切换到fragment b,点击的是其他的列表项,这时候我发现,这个fragment b已经被我隐藏了,并且是这样的:(已经初始化的fragment就不再初始化,只需要hide隐藏),但是隐藏了之后,这段获取数据的代码
主activity定义一个共享数据变量: private String instrName; public String getInstrName() { return instrName; } public void setInstrName(String instrName) { this.instrName = instrName; }
在其他fragment中使用如下语句即可得到该数据:
String instrName = ((MainActivity)getActivity()).getInstrName();
但重点不在于获取数据,我遇到的困难是这样的,先前的博文有提到我使用了popupwindow作为左侧下拉菜单,为了实现主界面不同fragment的切换,做了一个隐藏和显示的处理,只要已经实例化的fragment类,要用的时候,直接show显示即可,不用的时候hide隐藏起来。又不懂或者不知道如何使用的可以参考我这篇博文:点击打开链接。这样实现之后,我要再fragment
a中的列表点击其中一个列表项,跳转到另一个fragment b中,当然这个列表项的值需要传递到fragment b中,很多人会认为不是直接可以使用你上面的方法可以得到共享的数据吗?
其实难点在于,第一次切换到fragment b中,已经实例化的时候,确实能得到共享的数据,当第二次切换到fragment b,点击的是其他的列表项,这时候我发现,这个fragment b已经被我隐藏了,并且是这样的:(已经初始化的fragment就不再初始化,只需要hide隐藏),但是隐藏了之后,这段获取数据的代码
String instrName = ((MainActivity)getActivity()).getInstrName();
应该放到哪里会执行呢?
我的要求是从fragment a一切换到fragment b中就要马上获取到共享的数据,并展现在fragment b的列表中?
解决方案其实是有的,以前activity在恢复显示的时候有一个方法就是监听显示是否完成,同样对于fragment也有类似的方法可以监听,如下:
@Override public void onHiddenChanged(boolean hidd) { if (hidd) { String instrName = ((MainActivity)getActivity()).getInstrName(); System.out.println("当对冲界面重新恢复显示时候,得到从开仓单获取到的商品名称"+instrName+"***************++++++++++++*****"); System.out.println("当对冲界面重新恢复显示时候,得到从开仓单获取到的商品名称"+instrName+"***************++++++++++++*****"); } else { //相当于Fragment的onPause String instrName = ((MainActivity)getActivity()).getInstrName(); System.out.println("当对冲界面重新恢复显示时候,得到从开仓单获取到的商品名称"+instrName+"***************++++++++++++*****"); } }这样在fragment隐藏或者显示的时候,都能够获取到共享的数据。注意点是第一次是需要new一个frament对象,这时候也要得到共享数据,只需要将代码写到oonCreateView中即可。
相关文章推荐
- c#窗体传值用法实例详解
- ASP.NET页面间的传值的几种方法
- 关于C语言中参数的传值问题
- C# Winform窗口之间传值的多种方法浅析
- php下通过POST还是GET来传值
- JS中Iframe之间传值的方法
- asp.net 页面间传值方法小结
- ASP.NET页面传递值的方式介绍
- Servlet与JSP间的两种传值情况
- javascript中的变量是传值还是传址的?
- Javascript showModalDialog两个窗体之间传值
- Android学习笔记--使用剪切板在Activity中传值示例代码
- 如何传值在2个页面之间 要求不刷新父页面,并且不能用Querystring传值
- JavaScript新窗口与子窗口传值详解
- 浅析Java方法传值和传引用问题
- C#窗体传值实例汇总
- js弹出模式对话框,并接收回传值的方法
- javascript的变量、传值、传址、参数之间关系
- JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
- C#实现.net页面之间传值传参方法汇总