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

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

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

對(duì)于ListVie來(lái)說,數(shù)據(jù)項(xiàng)的設(shè)置有很多種方式,而自定義實(shí)現(xiàn)BaseAdapter是最經(jīng)常用的了,那么這里我們來(lái)講解一下自定義實(shí)現(xiàn)BaseAdapter的普通實(shí)現(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ù)項(xiàng)"+ i);
    }
    //創(chuàng)建適配器
    MyAdapter adapter = new MyAdapter(data);
    //設(shè)置適配器
    mList.setAdapter(adapter);

  }

}

MyAdapter.java

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

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

  @Override
  /**
  * 返回?cái)?shù)據(jù)源的長(zhǎng)度,表示ListView的item項(xiàng)顯示多少個(gè)
  */
  public int getCount() {
    return data == null ? 0 : data.size();
  }
  /**
   * 返回指定位置的 item 數(shù)據(jù)源的對(duì)象,這個(gè)方法為手動(dòng)調(diào)用,非設(shè)置適配器時(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è)置好模板,返回視圖,每個(gè)視圖是怎么顯示出來(lái)的, 核心點(diǎn),怎么產(chǎn)生一個(gè)View, View 里面怎么  
   * 放置對(duì)應(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;
  }
}

以上是普通的使用,但是這樣的效率會(huì)非常低,因?yàn)槊看渭虞d一個(gè)item都會(huì)調(diào)用getView方法,而每次都會(huì)去解析一個(gè)view布局,這樣一直解析會(huì)對(duì)內(nèi)存的消耗特別大,所以效率會(huì)大大降低,那么我們?cè)诖嘶A(chǔ)上先稍微優(yōu)化下,讓view解析次數(shù)變少一點(diǎn),最基本的操作就是采用convertView復(fù)用控件來(lái)進(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;

  }
}

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

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

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

相關(guān)文章

  • Android操作Html打開其他APP

    Android操作Html打開其他APP

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

    Intel HAXM為Android 模擬器加速解決模擬器運(yùn)行慢的問題

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

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

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)底部半透明彈出框PopUpWindow效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    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控件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • android 網(wǎng)絡(luò)請(qǐng)求庫(kù)volley方法詳解

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

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

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

    本篇文章給大家分享了Android代碼質(zhì)量管理的相關(guān)知識(shí)點(diǎn)以及重點(diǎn)分析,對(duì)此有興趣的朋友可以參考學(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)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • Android開發(fā)之Flutter與webview通信橋梁實(shí)現(xiàn)

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

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

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

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

最新評(píng)論