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

时间:2012-06-29 06:55:28

标签: android focus android-listview

有时我会注意到,对于View v

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

如果我理解正确的文档,那绝不应该这样。

v.getParent()是ListView

的(子类)

关于可能导致此问题的任何想法?

注意:我认为这有ofWindowFocus-mismatch是this issue

的根本原因

1 个答案:

答案 0 :(得分:1)

主要原因是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);

使用scrapView!= _views [position]调用getView(position,...)可能会发生,因此scrapView将被回收。另一方面,很可能同样的视图也会再次添加到ListView,导致视图变得奇怪。

这应该在ListView IMO中修复。