项目中。为了实现不同fragment之间值得传递,首先想到的是利用bundle或者shareprefercnce之类的共享数据机制,当不符合项目需求,有点过于复杂和冗余,就利用网上一位前辈的建议。在主Activity中,创建一个共享的数据变量,在其它fragment中仅仅要获取到这个值就能够得到数据,实现共享。代码例如以下:
主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中就可以。