Android 中ListView和GridView賦值錯位
ListView和GridView多次調(diào)用getView的bug,導(dǎo)致賦值錯位
最近總遇到寫GridView適配器賦值時,最后一兩個需定義其他圖片時,賦圖錯誤,原因就是適配器的getView多次調(diào)用,導(dǎo)致數(shù)據(jù)賦值錯誤,上網(wǎng)搜索終于找到解決方案,以此記錄下。
一.ListView
1.原因
因為listView一般用的是wrap_content,高度不確定,導(dǎo)致系統(tǒng)需要不斷地測量,也就多次調(diào)用onMeasure方法,所以就多次調(diào)用getView。
2.解決
很簡單,把寬高寫死即可(明確給個數(shù)字或者match_parent)
二.GridView
1.原因
不管高度和寬度寫死與否都會多次調(diào)用getView,原因有待繼續(xù)探索,。。。。
2.解決
無法阻止多次調(diào)用getView,只能在onMeasure調(diào)用getView的時候不要去對convertView做賦值的操作,只有當(dāng)onLayout的時候再對ConvertView進行操作。
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中對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了。
如有疑問請留言或到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- Android ScrollView 下嵌套 ListView 或 GridView出現(xiàn)問題解決辦法
- Android仿貼吧內(nèi)容下的簡單ListView嵌套GridView
- Android 中ScrollView嵌套GridView,ListView的實例
- Android開發(fā)之ListView、GridView 詳解及示例代碼
- 關(guān)于Android中ListView嵌套GridView的問題
- Android RecyclerView詳解之實現(xiàn) ListView GridView瀑布流效果
- Android之ScrollView嵌套ListView和GridView沖突的解決方法
- android ListView和GridView拖拽移位實現(xiàn)代碼
相關(guān)文章
Android應(yīng)用圖標(biāo)上的小紅點Badge實踐代碼
本篇文章主要介紹了Android應(yīng)用圖標(biāo)上的小紅點Badge實踐代碼,具有一定的參考價值,有興趣的可以了解一下2017-07-07
Android開發(fā)實現(xiàn)webview中img標(biāo)簽加載本地圖片的方法
這篇文章主要介紹了Android開發(fā)實現(xiàn)webview中img標(biāo)簽加載本地圖片的方法,結(jié)合實例形式分析了webview加載本地圖片的步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
Android中Fragment的加載方式與數(shù)據(jù)通信詳解
本文主要介紹了Android中Fragment的加載方式與數(shù)據(jù)通信的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03
Android開發(fā)筆記之:消息循環(huán)與Looper的詳解
本篇文章是對Android中消息循環(huán)與Looper的應(yīng)用進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Android通過Path實現(xiàn)搜索按鈕和時鐘復(fù)雜效果
這篇文章主要為大家詳細(xì)介紹了Android通過Path實現(xiàn)搜索按鈕和時鐘復(fù)雜效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09

