这可能是我看不到的非常简单的事情,或者我无法确定为什么会发生的非常奇怪的事情。
我有一个活动和3个片段。
main_fragment
(地图片段)left_menu_fragment
(用作主菜单的listfragment)right_menu_fragment
(用作上下文菜单的listfragment)所以想象一下像 facebook app ,主要内容和左右菜单。
当我在right_menu_fragment
中更改某些内容时,我希望活动让main_fragment
知道我更改了某些内容,因此我创建了一个界面。
右侧菜单执行回调,活动接收它,并在main_fragment
中调用正确的函数,到目前为止一切正常。
问题是,我正在将{strong>对象实例从right_menu_fragment
更新为main_fragment
中同一类的另一个实例(实际上,变量包含两个片段都有相同的名称)
当我进行回调时,右侧菜单会在活动中调用此方法:
@Override
public void changedJourneyPreferences(JourneyPreferences journeyPreferences) {
if(mapsFragment != null) {
mapsFragment.setJourneyPreferences(journeyPreferences);
}
}
,main_fragment
中的方法实现如下:
public void setJourneyPreferences(JourneyPreferences journeyPreferences) {
//first log to verify BEFORE THE UPDATE
boolean foo = false;
//Some verifications new prefs vs old prefs
if(some conditions) {
foo = true;
}
//second log to verify I haven't made the update
this.journeyPreferences = journeyPreferences; //Do the update
//third log to verify I changed properly
//If verifications I made previosly are met
if(foo) {
//do some other things
}
}
如您所见,我验证了我收到的变量的某些属性,以确定boolean
是true
还是false
,然后是,然后才会更新变量。
我添加了印刷品只是为了在运行时验证发生了什么......好吧,那些应该遇到的“其他东西”有时候永远不会发生。我遇到一旦调用方法,它首先更新变量然后执行方法中的代码,或者这是我推断的。
以下是一个示例日志:
first log- old:0 new:0
second log- old:0 new:0
third log- old:0 new:0
first log- old:1 new:1
second log- old:1 new:1
third log- old:1 new:1
first log- old:2 new:2
second log- old:2 new:2
third log- old:2 new:2
什么时候应该是这样的:
first log- old:0 new:0
second log- old:0 new:0
third log- old:0 new:0
first log- old:0 new:1
second log- old:0 new:1
third log- old:1 new:1
first log- old:1 new:2
second log- old:1 new:2
third log- old:2 new:2
我还尝试评论“做更新”行,然后它“解决”,但当然永远不会进行更新。
我还尝试更改变量名称。到处。在right_menu_fragment
和main_fragment
以及setJourneyPreferences
函数中,接收名称不同的变量名称。没用。
所以,简而言之:我的方法就好像“做更新”行是第一个(因为你显然不能看到它) < / p>
感谢任何帮助。
答案 0 :(得分:0)
JourneyPreferences.getMyLocationAs()的作用是什么?您的问题可能与该类中的静态变量或类似的东西相关吗?
答案 1 :(得分:0)
好的,我发现了错误。
当我将局部变量更新为我正在接收的变量作为参数时,我将自己的变量分配给我正在接收的变量(事实证明它与另一个片段完全相同)。
所以我不知道这究竟是如何工作的,但是我的局部变量变成了像指针这样的东西,同样的Id,相同的数据,同样的一切。 两个不同片段中的两个变量指向完全相同的数据。当我从活动中调用setJourneyPreferences
时,变量已经更新,这就是我在更新之前无法验证任何内容的原因。
我解决了它,创建了一个从参数传递值的新实例。稍有改变,但它确实存在差异:
取代这一行:
this.journeyPreferences = journeyPreferences; //Do the update
有了这个:
//Do the update
this.journeyPreferences = new JourneyPreferences(
journeyPreferences.getMyLocationAs(),
journeyPreferences.getTimeOfJourneyOpts(),
journeyPreferences.getTimeOfJourney());
复制数据而不是其他任何内容。