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毛玻璃背景效果簡(jiǎn)單實(shí)現(xiàn)代碼
這篇文章主要介紹了Android毛玻璃背景效果簡(jiǎn)單實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-08-08
Android實(shí)現(xiàn)定時(shí)任務(wù)功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)定時(shí)任務(wù)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
Android學(xué)習(xí)小結(jié)之獲取被啟動(dòng)的Activity傳回的數(shù)據(jù)
這篇文章主要介紹了獲取被啟動(dòng)的Activity傳回的數(shù)據(jù),非常不錯(cuò),介紹的非常詳細(xì),需要的朋友可以參考下2016-08-08
Android實(shí)現(xiàn)流光和光影移動(dòng)效果代碼
大家好,本篇文章主要講的是Android實(shí)現(xiàn)流光和光影移動(dòng)效果代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽2021-12-12
android TextView實(shí)現(xiàn)跑馬燈效果
這篇文章主要為大家詳細(xì)介紹了android TextView實(shí)現(xiàn)跑馬燈效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
android簡(jiǎn)單自定義View實(shí)現(xiàn)五子棋
這篇文章主要為大家詳細(xì)介紹了android簡(jiǎn)單自定義View實(shí)現(xiàn)五子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
Android 點(diǎn)擊生成二維碼功能實(shí)現(xiàn)代碼
二維碼,我們也稱(chēng)作QRCode,QR表示quick response即快速響應(yīng),在很多App中我們都能見(jiàn)到二維碼的身影,最常見(jiàn)的莫過(guò)于微信了。接下來(lái)給大家介紹android 點(diǎn)擊生成二維碼功能實(shí)現(xiàn)代碼,需要的朋友參考下吧2017-11-11

