android - ListView 重复显示问题
黄舟
黄舟 2017-04-17 13:43:41
0
5
877

本人新手,最近在学习 ListView 的应用。我先用 ViewPager + Fragmnet + ActionBar 实现了三个滑动界面。然后在第一个 Fragment 中设置了一个 ListView 用于显示联系人数据。如图一:

接着我滑动到最后一个 Fragment 界面,然后再滑动回来,结果发现 ListView 中的数据重复显示了一遍。如图二:

之后只要滑到最后一个 Fragment 再滑回来一次,ListView 中的联系人列表就会多重复一次。这是什么问题?望高手解答。

贴上自定义 Adapter 的 getView 方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
linearLayout = (LinearLayout) inflater.inflate(R.layout.list_contacts, null);
name = (TextView) linearLayout.findViewById(R.id.name_view);
number = (TextView) linearLayout.findViewById(R.id.number_view);
quickContactBadge = (QuickContactBadge) linearLayout.findViewById(R.id.quick_contact_badge);
name.setText(list.get(position).getName());
number.setText(list.get(position).getNumber());
quickContactBadge.assignContactUri(list.get(position).getDetailUri());
quickContactBadge.setImageBitmap(loadPhoto(list.get(position).getPhotoUri()));
return linearLayout;
}

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(5)
左手右手慢动作

可能是viewpager 回收了一個fragment 滑動回來就重新實例化fragment的時候你之前list還在就重複加進去了,設置viewpager 的setOffscreenPageLimit 讓他不要回收第一個或者fragment 被回收的時候清掉list

左手右手慢动作

自己搜尋viewholder吧。這是listview為了節省記憶體對cell進行了復用。只要用viewholder存下來就行

洪涛

這種實作方式不好,還是用ViewHolder做快取處理吧,Android資料適配器(Adapter)最佳化:使用高效率的ViewHolder

PHPzhong

大家都回答ViewHolder,可惜不能解決問題,只是提升效率以及節省記憶體。
樓主還是貼資料載入的代碼吧。

洪涛

這個情況和ViewHolder應該沒有關係

  • 如樓上所說, getView() 方法最好利用上ListView的Cell重用機制
  • 重複顯示資料應該是資料來源內資料重複加入了, 你列印下ListView的資料來源ArrayList的內容就知道了
  • 這裡面還有ViewPager的內容,建議研究完ListView, 再研究下ViewPager, 善用度娘和官方Demo,Doc

  • 最後: 貼程式碼要用編輯器工具列上的 "", 這樣更方便別人閱讀

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板