時々、View v
- v.hasWindowFocus()==false
- ((View)v.getParent()).hasWindowFocus())==true
ドキュメントを正しく理解している場合、これは決して当てはまりません。
v.getParent()
ListView の (サブクラス) です
これを引き起こしている可能性のあるアイデアはありますか?
注: この hasWindowFocus-mismatch がこの問題の根本的な原因であると思います
時々、View v
- v.hasWindowFocus()==false
- ((View)v.getParent()).hasWindowFocus())==true
ドキュメントを正しく理解している場合、これは決して当てはまりません。
v.getParent()
ListView の (サブクラス) です
これを引き起こしている可能性のあるアイデアはありますか?
注: この hasWindowFocus-mismatch がこの問題の根本的な原因であると思います
主な理由は、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 で修正する必要があります。