gpt4 book ai didi

android - 在 2.2 上获取 ListView 项目/倒序的 View ;适用于 4.0.3

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:48 25 4
gpt4 key购买 nike

我有一个 ListView,它显示来自 ArrayAdapter 的项目。我想在点击时为 View 设置动画。问题是在不同版本的 android 上我得到不同的 View (见下文)

我正在使用此方法从 ListActivity 获取 View :

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 方法为每个 View 运行:

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 的 View

您可能还注意到 Adapter.getViewListView.getChildAt 以相反的顺序返回项目,这会导致此问题。这种行为的原因可能是什么? (我没有在我的适配器中做任何花哨的事情)

如果有任何提示,我将不胜感激。谢谢!

最佳答案

好的。所以这就是正在发生的事情:

在干净的 ListView 上,当我注册 onItemClickListener 并执行点击时,不会调用 View 的适配器 getView 方法。这是我所期望的。

如果我设置一个 mList.setChoiceMode(ListView.CHOICE_MODE_SINGLE) 这使得 getView 方法在点击被注册后立即运行。这也是意料之中的。

但是 2.2 和 4+ 版本之间的区别在于:在 2.2 上:当发生此刷新时 getView 对反向 View 列表进行操作(请参阅我的问题)在 4+ 上(可能是 API 11+):getView 按列表的正常顺序运行

最有趣的部分是,当我将对 getViewForListPosition 的调用延迟 10 毫秒时,一切正常,并且适配器具有正确的 View 列表(又是正常顺序)。因此,似乎只有在使用 CHOICE_MODE_SINGLE

刷新适配器期间, View 的顺序才会反转

为了解决这个问题,我没有将 ListView 模式更改为 CHOICE_MODE_SINGLE,这样适配器在点击时就不会触发。我在 onItemClicked

中自己为点击的项目设置 bg/graphics

希望它可以节省一些时间:)

关于android - 在 2.2 上获取 ListView 项目/倒序的 View ;适用于 4.0.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15783089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com