从活动设置片段变量无法正常工作

时间:2013-07-25 07:16:01

标签: android callback android-fragments

这可能是我看不到的非常简单的事情,或者我无法确定为什么会发生的非常奇怪的事情。

我有一个活动和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
    }
}

如您所见,我验证了我收到的变量的某些属性,以确定booleantrue还是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_fragmentmain_fragment以及setJourneyPreferences函数中,接收名称不同的变量名称。没用。

所以,简而言之:我的方法就好像“做更新”行是第一个(因为你显然不能看到它) < / p>

感谢任何帮助。

2 个答案:

答案 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());

复制数据而不是其他任何内容。