【发布时间】:2019-01-16 21:01:53
【问题描述】:
我有一个自定义类的单个实例,在 Fragment 中声明了“遇到”,如下所示:
public class EncounterStrategyFragment extends Fragment
implements DialogConfirm.NoticeDialogListener{
private MalifauxEncounter encounter;
此对象包含一个列表。它提供给按预期工作的自定义列表适配器。适配器附加到的 ListView 已通过 registerForContextMenu(listview); 注册为上下文菜单。
我的问题是 'encounter's address/id 在 OnContextItemSelected 回调方法中发生变化。 这是 Fragment 中其他任何地方的“遭遇”状态:(id=830047711760, array size = 10)
但在 OnContextItemSelected 内部它变成了这样:(id=830055767320, internal array size = 0)
我会发布图片,但我的声誉不够高......
在 OnContextItemSelected 之外,地址与最初相同,因此不会重新创建 '遭遇对象;只有这种单一方法不同。因此,我尝试在 OnContextItemSelected 中执行的任何修改都会导致错误。
在我将此片段作为 ActionBar 选项卡结构的一部分之前,我的实现工作正常。
这到底是怎么回事?
编辑: 解决方案:我的问题的根本原因是操作栏选项卡管理器代码创建了两次片段。 OnContextItemSelected 使用来自 Fragment 的第二个实例的“encounter”变量,而另一个源使用的是第一个实例的副本。使用此帖子解决: Fragment onCreateView and onActivityCreated called twice
【问题讨论】:
-
发布复制问题所需的最少代码量。在编写代码时,您很可能会自行找到问题的根源。
-
当您尝试制作一个最小的示例来向我们展示发生了什么时,请发布您的
onContextItemSelected()方法。