ListView.hasWindowFocus==true 但子视图 hasWindowFocus==false

2024-05-08

有时我注意到,对于 View v

 - v.hasWindowFocus()==false
 - ((View)v.getParent()).hasWindowFocus())==true

如果我正确理解文档,情况就不应该如此。

v.getParent()是 ListView 的(子类)

关于可能导致这种情况的原因有什么想法吗?

注意:我认为 hasWindowFocus-mismatch 是根本原因这个问题 https://stackoverflow.com/questions/11242226/successfully-posted-runnable-only-gets-executed-when-parent-is-invalidated


主要原因是 ListView 不喜欢具有视图数组的适配器。

所以问题是由类似的代码触发的

public View getView (int position, View convertView, ViewGroup parent)
{
    return _views[position];
}

当查看 ListView 代码(或者更确切地说,它的父 AbsListView.obtainView 方法)时,您会看到类似的代码

    if (scrapView != null) {
        ...
        child = mAdapter.getView(position, scrapView, this);
        ...
        if (child != scrapView) {
            mRecycler.addScrapView(scrapView);

有可能发生这样的情况getView(position,...)使用 scrapView != _views[position] 调用,因此 scrapView 将被回收。另一方面,很可能相同的视图也再次添加到 ListView 中,导致视图出现奇怪的状态。

IMO 中应该修复此问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ListView.hasWindowFocus==true 但子视图 hasWindowFocus==false 的相关文章

随机推荐