0

有时我注意到,对于 View v

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

如果我正确理解文档,则永远不会是这种情况。

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

关于可能导致这种情况的任何想法?

注意:我认为这 hasWindowFocus-mismatch 是此问题的根本原因

4

1 回答 1

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);

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

这应该在 ListView IMO 中修复。

于 2012-06-29T11:24:42.317 回答