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,...)スクラップビュー != _views[position] で呼び出される可能性があるため、スクラップビューはリサイクルされます。一方、同じビューが ListView にも再度追加され、ビューが奇妙な状態になる可能性が非常に高くなります。

これは、ListView IMO で修正する必要があります。

于 2012-06-29T11:24:42.317 に答える