Android 中ListView和GridView賦值錯位
ListView和GridView多次調(diào)用getView的bug,導致賦值錯位
最近總遇到寫GridView適配器賦值時,最后一兩個需定義其他圖片時,賦圖錯誤,原因就是適配器的getView多次調(diào)用,導致數(shù)據(jù)賦值錯誤,上網(wǎng)搜索終于找到解決方案,以此記錄下。
一.ListView
1.原因
因為listView一般用的是wrap_content,高度不確定,導致系統(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做賦值的操作,只有當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)用圖標上的小紅點Badge實踐代碼
本篇文章主要介紹了Android應(yīng)用圖標上的小紅點Badge實踐代碼,具有一定的參考價值,有興趣的可以了解一下2017-07-07Android開發(fā)實現(xiàn)webview中img標簽加載本地圖片的方法
這篇文章主要介紹了Android開發(fā)實現(xiàn)webview中img標簽加載本地圖片的方法,結(jié)合實例形式分析了webview加載本地圖片的步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10Android中Fragment的加載方式與數(shù)據(jù)通信詳解
本文主要介紹了Android中Fragment的加載方式與數(shù)據(jù)通信的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03Android開發(fā)筆記之:消息循環(huán)與Looper的詳解
本篇文章是對Android中消息循環(huán)與Looper的應(yīng)用進行了詳細的分析介紹,需要的朋友參考下2013-05-05Android通過Path實現(xiàn)搜索按鈕和時鐘復雜效果
這篇文章主要為大家詳細介紹了Android通過Path實現(xiàn)搜索按鈕和時鐘復雜效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09