Android: Gallery的adapter中getView方法被执行多次

本文探讨了Android Gallery组件中的Adapter getView方法被多次调用的问题,并提供了两种解决方案来确保一次只滑动一个项目,适用于希望优化用户体验的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中遇到一个奇怪的问题:为Gallery设置的adapter中的getView方法被调用多次

客户需求:一次只能滑动一格


参考资料:

http://stackoverflow.com/questions/4687370/gallery-scroll-one-image-at-a-time


http://stackoverflow.com/questions/6058609/android-gallerys-getview-returning-incorrect-position

Android Adapter multiple getView

http://stackoverflow.com/questions/3196219/android-adapter-multiple-getview


android listview中getView重复被调用的问题  

getView被调用的次数取决于当前屏幕能显示的item的数量,显示一个item就调用一次。当listview的layout_height属性是wrap_content时,有可能造成listview无法计算高度,相应的需要显示的item数量就无法计算,造成getView多次被调用。

解决方案:
1:
在listview外面套一层 RelativeLayout ,将listview高度设置为 fill_parent


<span style="color: rgb(78, 78, 78);"><span class="tag" style="color: rgb(0, 0, 136);"><</span></span><span class="tag" style="color: rgb(0, 0, 136);">RelativeLayout</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(78, 78, 78);"><span class="atn" style="color: rgb(102, 0, 102);">xmlns:android</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"http://schemas.android.com/apk/res/android"</span>
<span class="pln" style="color: rgb(0, 0, 0);">    </span><span class="atn" style="color: rgb(102, 0, 102);">android:id</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@+id/RelativeLayout1"</span>
<span class="pln" style="color: rgb(0, 0, 0);">    </span><span class="atn" style="color: rgb(102, 0, 102);">android:layout_width</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"match_parent"</span>
<span class="pln" style="color: rgb(0, 0, 0);">    </span><span class="atn" style="color: rgb(102, 0, 102);">android:layout_height</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"match_parent"</span>
<span class="pln" style="color: rgb(0, 0, 0);">    </span><span class="atn" style="color: rgb(102, 0, 102);">android:orientation</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"vertical"</span><span class="pln" style="color: rgb(0, 0, 0);"> </span>
<span class="pln" style="color: rgb(0, 0, 0);">    </span><span class="atn" style="color: rgb(102, 0, 102);">android:background</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@drawable/repeat_bg"</span><span class="tag" style="color: rgb(0, 0, 136);">></span></span>
<p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; line-height: 22px;"><span style="color: rgb(78, 78, 78);"><br style="line-height: 25px;" /><span class="pln" style="line-height: 25px; color: rgb(0, 0, 0);"> </span></span><span style="line-height: 25px; color: rgb(78, 78, 78);"><span class="tag" style="color: rgb(0, 0, 136);"><ListView</span></span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="color: rgb(78, 78, 78);"><span class="pln" style="color: rgb(0, 0, 0);">            </span><span class="atn" style="color: rgb(102, 0, 102);">android:id</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@+id/friend_list"</span>
<span class="pln" style="color: rgb(0, 0, 0);">            </span><span class="atn" style="color: rgb(102, 0, 102);">android:layout_width</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"fill_parent"</span>
<span class="pln" style="color: rgb(0, 0, 0);">            </span><span class="atn" style="color: rgb(102, 0, 102);">android:layout_height</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"</span></span><span style="line-height: 22px;"><span style="color: rgb(255, 0, 0); line-height: 25px;"><span class="atv" style="color: rgb(0, 136, 0);">fill_parent</span></span></span><span style="color: rgb(78, 78, 78);"><span class="atv" style="color: rgb(0, 136, 0);">"</span></span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="color: rgb(78, 78, 78);"><span class="pln" style="color: rgb(0, 0, 0);">            </span><span class="atn" style="color: rgb(102, 0, 102);">android:layout_weight</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"1"</span>
<span class="pln" style="color: rgb(0, 0, 0);">            </span><span class="atn" style="color: rgb(102, 0, 102);">android:cacheColorHint</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"#00000000"</span>
<span class="pln" style="color: rgb(0, 0, 0);">            </span><span class="atn" style="color: rgb(102, 0, 102);">android:divider</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"#CCCCCC"</span>
<span class="pln" style="color: rgb(0, 0, 0);">            </span><span class="atn" style="color: rgb(102, 0, 102);">android:fastScrollEnabled</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"true"</span>
<span class="pln" style="color: rgb(0, 0, 0);">            </span><span class="atn" style="color: rgb(102, 0, 102);">android:focusableInTouchMode</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"true"</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="tag" style="color: rgb(0, 0, 136);">/></span>

</span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="color: rgb(78, 78, 78);"><span class="tag" style="color: rgb(0, 0, 136);"></</span></span><span class="tag" style="color: rgb(0, 0, 136);">RelativeLayout</span><span style="color: rgb(78, 78, 78);"><span class="tag" style="color: rgb(0, 0, 136);">></span></span></p>

2:
在listview外面套一层  LinearLayout ,将listview高度设置为 0dip
 
<p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span class="tag" style="color: rgb(0, 0, 136);"><LinearLayout</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(102, 0, 102);">xmlns:android</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"http://schemas.android.com/apk/res/android"</span>
<span class="pln" style="color: rgb(0, 0, 0);">    </span><span class="atn" style="color: rgb(102, 0, 102);">android:layout_width</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"fill_parent"</span>
<span class="pln" style="color: rgb(0, 0, 0);">    </span><span class="atn" style="color: rgb(102, 0, 102);">android:layout_height</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"fill_parent"</span>
<span class="pln" style="color: rgb(0, 0, 0);">    </span><span class="atn" style="color: rgb(102, 0, 102);">android:background</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"#f3f3f3"</span>
<span class="pln" style="color: rgb(0, 0, 0);">    </span><span class="atn" style="color: rgb(102, 0, 102);">android:orientation</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"vertical"</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="tag" style="color: rgb(0, 0, 136);">></span>

<span class="pln" style="color: rgb(0, 0, 0);">     </span><span class="tag" style="color: rgb(0, 0, 136);"><ListView</span>
<span class="pln" style="color: rgb(0, 0, 0);">        </span><span class="atn" style="color: rgb(102, 0, 102);">android:id</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"@+id/requestObjLV"</span>
<span class="pln" style="color: rgb(0, 0, 0);">        </span><span class="atn" style="color: rgb(102, 0, 102);">android:layout_width</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"fill_parent"</span>
<span class="pln" style="color: rgb(0, 0, 0);">        </span><span class="atn" style="color: rgb(102, 0, 102);">android:layout_height</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"</span><span style="color: rgb(255, 0, 0);"><span class="atv" style="color: rgb(0, 136, 0);">0dip</span></span><span class="atv" style="color: rgb(0, 136, 0);">"</span>
<span class="pln" style="color: rgb(0, 0, 0);">        </span><span class="atn" style="color: rgb(102, 0, 102);">android:layout_weight</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"1"</span>
<span class="pln" style="color: rgb(0, 0, 0);">        </span><span class="atn" style="color: rgb(102, 0, 102);">android:cacheColorHint</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"#00000000"</span>
<span class="pln" style="color: rgb(0, 0, 0);">        </span><span class="atn" style="color: rgb(102, 0, 102);">android:divider</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"</span><span style="line-height: 22px; color: rgb(78, 78, 78);"><span class="atv" style="line-height: 25px; color: rgb(0, 136, 0);">#CCCCCC</span></span><span class="atv" style="color: rgb(0, 136, 0);">"</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="tag" style="color: rgb(0, 0, 136);">/></span>

<span class="tag" style="color: rgb(0, 0, 136);"></LinearLayout></span></p>



当ListView\GridView设置固定大小,就不会多次调用了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值