ArrayAdapter の項目を表示する ListView があります。クリックされたときにビューをアニメーション化したい。問題は、さまざまなバージョンの Android でさまざまなビューが表示されることです (以下を参照)。
このメソッドを使用して ListActivity からビューを取得しています:
private View getViewForListPosition(int position) {
int firstPosition = mList.getFirstVisiblePosition() - mList.getHeaderViewsCount();
int wantedChild = position - firstPosition;
ZLog.d(LOG,"getViewForListPosition , position : " + position + ", wantedChild : " + wantedChild + ", view hash : " +mList.getChildAt(wantedChild).hashCode());
for(int i = mList.getChildCount(); i>0; i--){
ZLog.d(LOG, "pos : " + (i-1) + ", hash : " +mList.getChildAt(i-1).hashCode());
}
return mList.getChildAt(wantedChild);
}
そのため、Android 4.0.3 および 4.2.2 の電話では次のようになります。
getViewForListPosition , position : 3, wantedChild : 3, view hash : 1101734248
pos : 5, hash : 1104109360
pos : 4, hash : 1104254936
pos : 3, hash : 1101734248
pos : 2, hash : 1104876880
pos : 1, hash : 1104862296
pos : 0, hash : 1104793008
次に、アイテムがクリックgetView
されると、各ビューに対してアダプタ メソッドが実行されます。
getView, position : 0, convertView is notnull, cv hash1104793008
getView, position : 1, convertView is notnull, cv hash1104862296
getView, position : 2, convertView is notnull, cv hash1104876880
getView, position : 3, convertView is notnull, cv hash1101734248
getView, position : 4, convertView is notnull, cv hash1104254936
getView, position : 5, convertView is notnull, cv hash1104109360
すべてが正常で、期待どおりに動作していることがわかります。ただし、これを Android 2.2 で実行すると、次の結果が得られます。
getViewForListPosition , position : 3, wantedChild : 3, view hash : 1205607672
pos : 5, hash : 1205730120
pos : 4, hash : 1205712904
pos : 3, hash : 1205607672
pos : 2, hash : 1206547728
pos : 1, hash : 1206483960
pos : 0, hash : 1207864856
getView, position : 0, convertView is notnull, cv hash1205730120
getView, position : 1, convertView is notnull, cv hash1205712904
getView, position : 2, convertView is notnull, cv hash1205607672
getView, position : 3, convertView is notnull, cv hash1206547728
getView, position : 4, convertView is notnull, cv hash1206483960
getView, position : 5, convertView is notnull, cv hash1207864856
お気づきかもしれませんがgetViewForListPosition
、アダプターが位置2に使用するビューが返されます
Adapter.getView
また、またはListView.getChildAt
が逆の順序でアイテムを返していることに気付いたかもしれません。これがこの問題の原因です。この動作の理由は何でしょうか? (私はアダプターで何も派手なことをしていません)
あらゆる種類のヒントに感謝します。ありがとう!