java - 类转换异常 : HeaderViewListAdapter cannot be cast to MenuAdapter in Android when using a ContextMenu with a header title

标签 java android androidx

当我长按 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)

我已检查调用 fragment 中的 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 上的模拟器软件错误。

关于java - 类转换异常 : HeaderViewListAdapter cannot be cast to MenuAdapter in Android when using a ContextMenu with a header title,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62223023/

相关文章:

java - 使用 @Value 会产生 UnsatisfiedDependencyException

javascript - 如何访问phonegap/android中的图库?

android - Kotlin协程吞下异常

java - 在 Java 中格式化打印对的输出?

java - 多个线程一次更新数据库中的同一行如何保持一致性

android - 使用 "match_parent"将图像对齐到顶部

android - 如何在我的 Flutter 项目中迁移到 AndroidX?

android - Android Studio 中的 "package android.support.v7.app does not exist"错误

android - 如何引导用户单击 View ?

Java传递数组和对象值