情况*:我正在逐个片段地查找有关onKey覆盖方法的一些信息。我有一个单一的活动几个片段结构。一次只有一个片段可见。我显示了一个带有事务添加片段的新片段(因为我不想在返回时重新创建前一个片段,所以我不使用replace) + setPrimaryFragment。我用transaction remove fragment + setPrimaryFragment返回,用最上面的片段更新。在我的片段中,我覆盖了onKey方法。
现在我的问题是*有时onKey (后退按钮)不是由顶部片段(可见的和主要的)接收的,而是由不可见的和非主要的片段接收的。
案例1:有两个片段,打开和返回,工作正常。
使用3个片段,打开fr1,打开fr2,打开fr3,然后返回fr2(删除并销毁fr3)。因此,现在如果我再次推送,onKey不是在第二个片段fr2 (可见和主要)上调用的,而是由第一个片段fr1 (不可见和主要)调用的。
有没有人能告诉我为什么?onKey如何决定调用哪个片段?
现在,我通过在onKey内部检查碎片是否是主碎片来解决这个问题,如果不是,我就将自己的调用分派给主碎片。但我还是想知道为什么..。
谢谢。
发布于 2020-06-11 18:50:36
不知道回复我的请求是否有用,但我终于找到了这种行为的由来。即使该片段是顶部可见的片段,也不意味着它具有焦点。只有具有焦点的片段才会触发onKey方法。弹出或替换并不能转移焦点,你需要自己用方法请求焦点来做。
https://stackoverflow.com/questions/57481087
复制相似问题