欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android 之listview 優(yōu)化方法

 更新時間:2018年06月14日 09:07:46   作者:石頭_起航  
這篇文章主要介紹了android 之listview 優(yōu)化方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

這個東西做android是必備的,我相信你一定也會,但是我寫下來的目的就是記錄一下。

這個東西面試也很多會問到的,那么我們怎么回答那?

首先我認(rèn)為有這么幾點:

1、listview在定義的時候?qū)捄透咦詈霉潭ㄒ幌?,這樣可以減少listview測量次數(shù),避免每次加載的時候都要去進(jìn)行測量。

2、分頁加載,這也是優(yōu)化之一,優(yōu)化內(nèi)存,還有體驗感,有興趣的可以試試大數(shù)據(jù)加載;

3、convertView 就是布局的復(fù)用;

4、ViewHolder的使用 目的減少findviewByID的次數(shù);

下面代碼驗證一下3和4。

public View getView(int position, View convertView, ViewGroup parent) {
  Log.e("========>>>>>", "getView-----position" + position);
  convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
  return convertView;
}

也就是說如果這樣寫的話每次都會進(jìn)行布局的填充(滑動一下你就會發(fā)現(xiàn)每次都會打印日志),找到相應(yīng)的布局,如果每次都去填充的話肯定浪費(fèi)資源,所以我們這樣去寫

public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
    Log.e("========>>>>>", "getView-----position" + position);
  } else {
  }
  return convertView;
}

你會看到日志始終是這幾個數(shù)據(jù)(如果你頁面顯示5個那個這里的數(shù)據(jù)就應(yīng)該是六條會比顯示的數(shù)據(jù)多一條)。

ViewHolder

如果不使用viewHolder的話代碼就是這樣的

public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
  }
  TextView textView = convertView.findViewById(R.id.tv);
   textView.setText(mArrayList.get(position));
  return convertView;
}

很明顯這段代碼每次textview 都得findViewById;你可能會說你可以在if判斷里面findViewById啊,然后在if外邊賦值啊,你可以試試 你會發(fā)現(xiàn)很有意思的事情,上下滑動幾次,你會發(fā)現(xiàn)數(shù)據(jù)就會混亂,并且重復(fù)數(shù)據(jù)很多。這樣顯然是不符合我們的要求的;

public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder viewHolder;
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
    viewHolder = new ViewHolder();
    viewHolder.mTextView = convertView.findViewById(R.id.tv);
    convertView.setTag(viewHolder);
  } else {
    viewHolder = (ViewHolder) convertView.getTag();
  }
  viewHolder.mTextView.setText(mArrayList.get(position));
  return convertView;
}

public static class ViewHolder {
  private TextView mTextView;
}

這樣的基本復(fù)合我們的要求了,數(shù)據(jù)不會混亂并且復(fù)用了布局還減少了findViewById的次數(shù),這樣大大減少了內(nèi)存的使用。其實這樣做有個問題listview item中如果有圖片快速滑動你會發(fā)現(xiàn)錯位的問題,當(dāng)然這些問題第三方的加載框架一般都可以解決。listview item盡量減少布局的嵌套 還有大圖片的加載 容易o(hù)om。listview 優(yōu)化差不多就這些,如果還有其他的更好的優(yōu)化方法,歡迎留言。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android繪制跟隨手指移動的小球

    Android繪制跟隨手指移動的小球

    這篇文章主要為大家詳細(xì)介紹了Android繪制跟隨手指移動的小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Android自定義View實現(xiàn)動畫效果詳解

    Android自定義View實現(xiàn)動畫效果詳解

    這篇文章主要為大家詳細(xì)介紹了Android如何通過自定義View實現(xiàn)動畫效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • Android activity實現(xiàn)延時跳轉(zhuǎn)功能

    Android activity實現(xiàn)延時跳轉(zhuǎn)功能

    Activity是一個Android的應(yīng)用組件,它提供屏幕進(jìn)行交互。今天通過本文給大家介紹Android activity實現(xiàn)延時跳轉(zhuǎn)功能,感興趣的朋友一起看看吧
    2021-06-06
  • Android精確測量文本寬高及基線位置的方法

    Android精確測量文本寬高及基線位置的方法

    這篇文章主要給大家介紹了關(guān)于Android精確測量文本寬高及基線位置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • android實現(xiàn)圖片反轉(zhuǎn)效果

    android實現(xiàn)圖片反轉(zhuǎn)效果

    這篇文章主要介紹了android實現(xiàn)圖片反轉(zhuǎn)效果的方法,需要的朋友可以參考下
    2015-09-09
  • 淺談Android串口通訊SerialPort原理

    淺談Android串口通訊SerialPort原理

    這篇文章主要介紹了淺談Android串口通訊SerialPort原理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Android開發(fā)之基于DialogFragment創(chuàng)建對話框的方法示例

    Android開發(fā)之基于DialogFragment創(chuàng)建對話框的方法示例

    這篇文章主要介紹了Android開發(fā)之基于DialogFragment創(chuàng)建對話框的方法,結(jié)合實例形式分析了DialogFragment創(chuàng)建對話框的具體功能與布局相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-08-08
  • Android為Tiny4412設(shè)備驅(qū)動在proc目錄下添加一個可讀版本信息的文件

    Android為Tiny4412設(shè)備驅(qū)動在proc目錄下添加一個可讀版本信息的文件

    今天小編就為大家分享一篇關(guān)于Android為Tiny4412設(shè)備驅(qū)動在proc目錄下添加一個可讀版本信息的文件,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • android實現(xiàn)簡單拍照功能

    android實現(xiàn)簡單拍照功能

    這篇文章主要為大家詳細(xì)介紹了android實現(xiàn)簡單拍照功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android編程自定義線程池與用法示例

    Android編程自定義線程池與用法示例

    這篇文章主要介紹了Android編程自定義線程池與用法,結(jié)合實例形式分析了Android線程池的功能、定義及簡單使用方法,需要的朋友可以參考下
    2017-12-12

最新評論