这个问题让我抓狂了一段时间(它阻止了发布到亚马逊应用商店,因为应用程序已经被禁止了,但现在我被这个bug困住了,他们不会重新发布它…)。
我有一个布局,左边有一个列表,右边有一个网格(如截图所示)。单击左侧列表中的项目(类别)将调用api,返回一些内容(电影)并在右侧部分显示它们。然后,当您单击右侧片段中的电影时,应该会发生一些其他事情。
它已经工作了一段时间,没有用户抱怨,它确实在某些设备上工作……例如,它可以在运行android 7.1的amazon Fire版本上运行,但不能在他们的android 5.1或android 9版本上运行……2020年12月16日编辑:请参阅问题底部的编辑...通过更新库--降级回老版本--这似乎只发生在基于Android9的Fire设备上,而老版本--包括5和7--也能正常工作
在有问题的设备上,这是发生的奇怪行为:如果你选择列表中前三项中的一项,在右边的网格中,我的onClickListener不会触发。从第4项开始,将触发onClickListener并执行我的代码。
只有在使用远程/dpad时才会发生这种情况。触摸事件也适用于前三个...但是这个问题发生在某些型号的亚马逊Fire电视和其他Android电视上,这些电视没有触摸屏,必须使用遥控器(在一个模拟器上我可以重现它,在另一个模拟器上我不能...即使两者都运行的是android 10...)
正确的部分是由片段组成的-它总是相同的片段,总是相同的api调用(只是作为api调用的参数的不同类别),总是返回和需要显示的相同类型的东西,通过相同的适配器,持有器等……
我不知所措,不知道去哪里调查。我甚至尝试过降级库、编译器等。我可以分享代码片段(尽管我必须做很多清理工作,而且它仍然会相当多,因为它是一个由许多片段组成的复杂布局……但它与这个set onClickListener in getview() with ViewHolder class非常相似。我还检查了这个https://scottweber.com/2013/04/30/adding-click-listeners-to-views-in-adapters/,我得到了完全相同的行为...)但是如果代码真的被破解了,它就不会工作了.但事实上,它“通常有效”,但不是列表中的前三个项目,这让我感到困惑……正如我已经写过的:这将是相同的片段,相同的代码...非常奇怪。这就是为什么我怀疑是平台/库/编译器问题。...but我不知道该去哪里看……

2020年12月16日编辑/更新:在我提交了一个版本,其中我也降级了很多库和gradle之后(我那端没有代码更改),然后我可以在亚马逊商店再次批准它,但设备兼容性有限。基本上,他们说它在最旧的设备上工作,并且只在(一些)较新的设备上中断…有意思的。我仍然没有找到罪魁祸首,但至少有一种方向可以看在哪里……
发布于 2020-12-22 17:36:31
看起来如果我设置
android:descendantFocusability="afterDescendants"
在GridView上,它的工作更可靠。
我仍然在对新旧版本进行更多的回归测试...我不知道为什么焦点窃取只发生在该片段的一些实例上,而不发生在其他实例上……
我看过的其他有用的线程,帮助我找到了正确的方向(我必须买一个新一代的Fire TV棒才能重现和调试它):
https://stackoverflow.com/questions/65199475
复制相似问题