变量的地址在onContextItemSelected中是不同的

时间:2014-06-17 00:08:30

标签: java android

我有一个自定义类的实例,在Fragment中声明'遇到',如下所示:

public class EncounterStrategyFragment extends Fragment
                                   implements DialogConfirm.NoticeDialogListener{

    private MalifauxEncounter encounter;

此对象包含一个List。它被提供给一个按预期工作的自定义List适配器。附加的适配器ListView已通过registerForContextMenu(listview);注册了上下文菜单。

我的问题是'遇到的地址/ id正在OnContextItemSelected回调方法中发生变化。 这是片段中其他地方遇到的状态:(id = 830047711760,数组大小= 10)

但在OnContextItemSelected中它变为:(id = 830055767320,内部数组大小= 0)

我会发布图片,但我的声誉不够高......

在OnContextItemSelected之外,地址与最初的地址相同,因此不会重新创建'遇到对象;这种方法只有不同之处。因此,我尝试在OnContextItemSelected内执行的任何修改都会导致错误。

在将此片段作为ActionBar选项卡结构的一部分之前,我的实现工作正常。

到底发生了什么事?

修改 解决方案:我的问题的根本原因是Action Bar选项卡管理器代码创建了两次Fragment。 OnContextItemSelected使用Fragment的第二个实例中的'encounter'变量,而另一个源使用第一个实例的副本。已使用此帖解决: Fragment onCreateView and onActivityCreated called twice

2 个答案:

答案 0 :(得分:0)

我的问题的根本原因是Action Bar选项卡管理器代码创建了两次Fragment。 OnContextItemSelected方法使用Fragment的第二个实例中的'encounter'变量,而另一个源使用第一个实例的副本。已使用此帖子解决:Fragment onCreateView and onActivityCreated called twice

答案 1 :(得分:0)

可能有人卡住了onContextItemSelected中返回的错误数据。就我而言,我基于一个片段和上下文菜单使用了ViewPager

如果是这种情况,请参见Wrong fragment in ViewPager receives onContextItemSelected call

例如

override fun onContextItemSelected(item: MenuItem?): Boolean {
    return if (userVisibleHint) {
        // Handle menu events and return true
        true
    } else
        false // Pass the event to the next fragment
}