Android 中ListView和GridView賦值錯(cuò)位
ListView和GridView多次調(diào)用getView的bug,導(dǎo)致賦值錯(cuò)位
最近總遇到寫(xiě)GridView適配器賦值時(shí),最后一兩個(gè)需定義其他圖片時(shí),賦圖錯(cuò)誤,原因就是適配器的getView多次調(diào)用,導(dǎo)致數(shù)據(jù)賦值錯(cuò)誤,上網(wǎng)搜索終于找到解決方案,以此記錄下。
一.ListView
1.原因
因?yàn)閘istView一般用的是wrap_content,高度不確定,導(dǎo)致系統(tǒng)需要不斷地測(cè)量,也就多次調(diào)用onMeasure方法,所以就多次調(diào)用getView。
2.解決
很簡(jiǎn)單,把寬高寫(xiě)死即可(明確給個(gè)數(shù)字或者match_parent)
二.GridView
1.原因
不管高度和寬度寫(xiě)死與否都會(huì)多次調(diào)用getView,原因有待繼續(xù)探索,。。。。
2.解決
無(wú)法阻止多次調(diào)用getView,只能在onMeasure調(diào)用getView的時(shí)候不要去對(duì)convertView做賦值的操作,只有當(dāng)onLayout的時(shí)候再對(duì)ConvertView進(jìn)行操作。
1).自定義GridView:
MyGridView.java public class MyGridView extends GridView { public boolean isOnMeasure; public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { isOnMeasure = true; super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { isOnMeasure = false; super.onLayout(changed, l, t, r, b); } }
2).getView中對(duì)ConvertView的處理
@Override public View getView(int position, View convertView, ViewGroup parent) { System.out.println("xcqw getView 1***position"+position); ViewHolder holder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.item, parent, false); holder = new ViewHolder(); holder.tvContent = (TextView) convertView.findViewById(R.id.tv_content); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if(((MyGridView) parent).isOnMeasure){ //如果是onMeasure調(diào)用的就立即返回 return convertView; } System.out.println("xcqw getView 2***position"+position); String content = contentList.get(position); holder.tvContent.setText(content); //如果不是onMeasure調(diào)用的就可以正常操作了 //賦值操作 return convertView; }
這樣就ok了。
如有疑問(wèn)請(qǐng)留言或到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Android ScrollView 下嵌套 ListView 或 GridView出現(xiàn)問(wèn)題解決辦法
- Android仿貼吧內(nèi)容下的簡(jiǎn)單ListView嵌套GridView
- Android 中ScrollView嵌套GridView,ListView的實(shí)例
- Android開(kāi)發(fā)之ListView、GridView 詳解及示例代碼
- 關(guān)于Android中ListView嵌套GridView的問(wèn)題
- Android RecyclerView詳解之實(shí)現(xiàn) ListView GridView瀑布流效果
- Android之ScrollView嵌套ListView和GridView沖突的解決方法
- android ListView和GridView拖拽移位實(shí)現(xiàn)代碼
相關(guān)文章
Android編程實(shí)現(xiàn)添加低電流提醒功能的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)添加低電流提醒功能的方法,涉及Android廣播監(jiān)聽(tīng)及電源監(jiān)控等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09Android應(yīng)用圖標(biāo)上的小紅點(diǎn)Badge實(shí)踐代碼
本篇文章主要介紹了Android應(yīng)用圖標(biāo)上的小紅點(diǎn)Badge實(shí)踐代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07Android開(kāi)發(fā)實(shí)現(xiàn)webview中img標(biāo)簽加載本地圖片的方法
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)webview中img標(biāo)簽加載本地圖片的方法,結(jié)合實(shí)例形式分析了webview加載本地圖片的步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10Android中Fragment的加載方式與數(shù)據(jù)通信詳解
本文主要介紹了Android中Fragment的加載方式與數(shù)據(jù)通信的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03Android開(kāi)發(fā)筆記之:消息循環(huán)與Looper的詳解
本篇文章是對(duì)Android中消息循環(huán)與Looper的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Android通過(guò)Path實(shí)現(xiàn)搜索按鈕和時(shí)鐘復(fù)雜效果
這篇文章主要為大家詳細(xì)介紹了Android通過(guò)Path實(shí)現(xiàn)搜索按鈕和時(shí)鐘復(fù)雜效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09