我有一个自定义类的实例,在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
答案 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
}