当我长时间单击ListView中的列表项并且注册了一个上下文菜单后,该错误就会出现,然后用户可以选择一个选项。
我在实际设备上没有错误,但是在仿真器(API级别25)上,我现在看到上面的错误。在堆栈跟踪中,没有引用我自己的代码,但它来自MenuPopupWindow行141,如下所示(这是Android预定义的类,而不是我的类)。当我在Android来源中查看该文件时,显示以下行:
((MenuAdapter) getAdapter()).getAdapterMenu().close(false /* closeAllMenus */);
这似乎导致以下异常:
E / UncaughtException:java.lang.ClassCastException:android.widget.HeaderViewListAdapter无法转换为com.android.internal.view.menu.MenuAdapter 在android.widget.MenuPopupWindow $ MenuDropDownListView.onKeyDown(MenuPopupWindow.java:141)
我已经检查了调用片段中的onCreateContextMenu方法是否没有问题-onCreateContextMenu执行完成后发生崩溃。
我以前在模拟器或真实设备上都没有像这样的问题,但这只是在将UI库升级到androidx库之后才发生。
因此,我想知道这是否与它有任何关系(但在实际设备上没有任何问题。由于问题是在内部Android类中发生的,因此我不知道如何解决此问题,或者这是否与我的代码有任何关系,或者是否是内部Android错误?
更新:当我省去以下行时,它不会在模拟器上崩溃(但是显然我的上下文菜单没有标题):
menu.setHeaderTitle("Tournament options");
菜单来自重写方法内部的位置:
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo)
[此外,在运行API 29的模拟器上我也没有收到此错误。我在API 28上测试过的设备。由于我没有带API 25的真实设备(该设备在模拟器上崩溃),因此我不确定它是否会在带API 25的真实设备上崩溃。但是,当然,这令人担心模拟器API 25崩溃。
任何帮助表示赞赏。
好吧,我冷重启了模拟器,然后在任何API级别上都没有问题。只是以为我会把它发布为答案,以防万一其他人遇到这个问题。必须是API级别25的仿真器软件错误。