亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android自定義實現(xiàn)BaseAdapter的普通實現(xiàn)

 更新時間:2016年08月18日 15:47:26   作者:qq_27630169  
這篇文章主要為大家詳細(xì)介紹了Android自定義實現(xiàn)BaseAdapter的普通實現(xiàn),感興趣的小伙伴們可以參考一下

對于ListVie來說,數(shù)據(jù)項的設(shè)置有很多種方式,而自定義實現(xiàn)BaseAdapter是最經(jīng)常用的了,那么這里我們來講解一下自定義實現(xiàn)BaseAdapter的普通實現(xiàn)。

MainActivity.java

public class MainActivity extends AppCompatActivity {
  //數(shù)據(jù)源
  private List<String> data;
  //ListView控件
  private ListView mList;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //獲取控件ID
    mList = (ListView)findViewById(R.id.mList);
    data = new ArrayList<>();
    //數(shù)據(jù)賦初值
    for(int i = 0; i < 20; i ++){
      data.add("數(shù)據(jù)項"+ i);
    }
    //創(chuàng)建適配器
    MyAdapter adapter = new MyAdapter(data);
    //設(shè)置適配器
    mList.setAdapter(adapter);

  }

}

MyAdapter.java

public class MyAdapter extends BaseAdapter {
  //數(shù)據(jù)項
  private List<String> data;

  public MyAdapter(List<String> data) {
    this.data = data;
  }

  @Override
  /**
  * 返回數(shù)據(jù)源的長度,表示ListView的item項顯示多少個
  */
  public int getCount() {
    return data == null ? 0 : data.size();
  }
  /**
   * 返回指定位置的 item 數(shù)據(jù)源的對象,這個方法為手動調(diào)用,非設(shè)置適配器時候調(diào)用
   * @param position 指定位置
   * @return
   */
  @Override
  public Object getItem(int position) {
    return data.get(position);
  }

  /**
   * 返回指定位置的 item的標(biāo)記 id,很少使用到
   * @param position 指定位置
   * @return
   */
  @Override
  public long getItemId(int position) {
    return position;
  }

  /**
   * 工廠方法,設(shè)置好模板,返回視圖,每個視圖是怎么顯示出來的, 核心點,怎么產(chǎn)生一個View, View 里面怎么  
   * 放置對應(yīng)的內(nèi)容
   * @param position 當(dāng)前加載的位置
   * @param convertView 復(fù)用的view
   * @param parent listview
   * @return
   */
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    //獲取布局
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item,null);
    //獲取布局中的TextView控件1
    TextView tv1 = (TextView) view.findViewById(R.id.mTv1);
    //設(shè)置控件1的數(shù)據(jù)
    tv1.setText(data.get(position));
    //獲取布局中的TextView控件2
    TextView tv2 = (TextView) view.findViewById(R.id.mTv2);
    //設(shè)置控件2數(shù)據(jù)
    tv2.setText(data.get(position));
    return view;
  }
}

以上是普通的使用,但是這樣的效率會非常低,因為每次加載一個item都會調(diào)用getView方法,而每次都會去解析一個view布局,這樣一直解析會對內(nèi)存的消耗特別大,所以效率會大大降低,那么我們在此基礎(chǔ)上先稍微優(yōu)化下,讓view解析次數(shù)變少一點,最基本的操作就是采用convertView復(fù)用控件來進(jìn)行操作。

這里只需要修改getView方法中的處理:

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    Log.i("TAG", "getView: " + position);
    if (convertView == null) {
      convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, null);
    }
    TextView tv1 = (TextView) convertView.findViewById(R.id.mTv1);
    tv1.setText(data.get(position));
    TextView tv2 = (TextView) convertView.findViewById(R.id.mTv2);
    tv2.setText(data.get(position));
    return convertView;

  }
}

以上的處理方式相比上面的處理方式相對于上面的解析要少很多次,因為第一種實現(xiàn)方式是任何一個需要顯示的控件都需要去解析一次布局,而這里我們使用了系統(tǒng)給的converView復(fù)用控件,他的基本原理是,系統(tǒng)會自動創(chuàng)建好界面顯示n個item的數(shù)據(jù)項(比如一個界面可見的item為5個,默認(rèn)創(chuàng)建好了5個view布局對象),保存到converView中(這里可以把他當(dāng)成一個循環(huán)數(shù)組吧,他的總?cè)萘肯喈?dāng)于是n + 1),當(dāng)顯示第n + 1個的時候,他會解析一次,之后的顯示的view布局會復(fù)用自己的converView中已經(jīng)存在的布局項,而不再去重新解析。簡單的畫個圖吧:

如上圖所示,相當(dāng)于只解析了6次,其他的view都是復(fù)用的,所以相對于上面的實現(xiàn),這樣的效率會相對高一點,不過,雖然解析的次數(shù)是少了,但是每個控件需要findViewById還是會重復(fù)調(diào)用,而且其實每個不同對象view中的控件id對象肯定是相同的,所以,重復(fù)的去調(diào)用又會顯得效率不高,那么如何解決不重復(fù)findViewById呢,那就要使用到我們的優(yōu)化布局了,關(guān)于優(yōu)化,將在下一篇博客中介紹。

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

相關(guān)文章

  • Android操作Html打開其他APP

    Android操作Html打開其他APP

    這篇文章主要為大家詳細(xì)介紹了Android操作Html打開其他APP的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Intel HAXM為Android 模擬器加速解決模擬器運行慢的問題

    Intel HAXM為Android 模擬器加速解決模擬器運行慢的問題

    Android 模擬器一直以運行速度慢著稱, 本文介紹使用 Intel HAXM 技術(shù)為 Android 模擬器加速, 使模擬器運行度媲美真機(jī), 徹底解決模擬器運行慢的問題,感興趣的朋友可以了解下哦
    2013-01-01
  • Android實現(xiàn)底部半透明彈出框PopUpWindow效果

    Android實現(xiàn)底部半透明彈出框PopUpWindow效果

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)底部半透明彈出框PopUpWindow效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android ImageView Src 和Background 區(qū)別

    Android ImageView Src 和Background 區(qū)別

    這篇文章主要介紹了Android ImageView Src 和Background 區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Android自定義Progress控件的方法

    Android自定義Progress控件的方法

    這篇文章主要為大家詳細(xì)介紹了Android自定義Progress控件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • android 網(wǎng)絡(luò)請求庫volley方法詳解

    android 網(wǎng)絡(luò)請求庫volley方法詳解

    這篇文章主要介紹了android 網(wǎng)絡(luò)請求庫volley方法詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 淺析Android代碼質(zhì)量管理

    淺析Android代碼質(zhì)量管理

    本篇文章給大家分享了Android代碼質(zhì)量管理的相關(guān)知識點以及重點分析,對此有興趣的朋友可以參考學(xué)習(xí)下。
    2018-05-05
  • Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配技巧

    Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配技巧

    今天小編就為大家分享一篇關(guān)于Android 8.0系統(tǒng)中應(yīng)用圖標(biāo)的適配技巧,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Android開發(fā)之Flutter與webview通信橋梁實現(xiàn)

    Android開發(fā)之Flutter與webview通信橋梁實現(xiàn)

    這篇文章主要為大家介紹了Android開發(fā)之Flutter與webview通信橋梁實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Android繪圖之Paint的使用方法詳解

    Android繪圖之Paint的使用方法詳解

    這篇文章主要給大家介紹了關(guān)于Android繪圖之Paint使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),并給大家介紹了DrawText 基線確定的方法,需要的朋友可以參考借鑒,下面隨著小編來一些學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11

最新評論