<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 2.4.6 BaseAdapter優化 ## 本節引言: > 上一節中我們學習了如何來使用一個ListView以及自定義一個簡單的BaseAdapter,我們從代碼 中可以看出比較重要的兩個方法:getCount()和getView(),界面上有多少列就會調用多少次getView, 這個時候可能看出一些端倪,每次都是新inflate一個View,都要進行這個XML的解析,這樣會 很浪費資源,當然,幾十列或者幾百列的列表并不能體現什么問題,但假如更多或者布局更加復雜? 所以學習ListView的優化很重要,而本節針對的是BaseAdapter的優化,優化的兩點有,復用convertView 以及使用ViewHolder重用組件,不用每次都findViewById,我們具體通過代碼來體會吧! ## 1.復用ConvertView: > 上面也說了,界面上有多少個Item,那么getView方法就會被調用多少次! 我們來看看上一節我們寫的getView()部分的代碼: ``` @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false); ImageView img_icon = (ImageView) convertView.findViewById(R.id.img_icon); TextView txt_aName = (TextView) convertView.findViewById(R.id.txt_aName); TextView txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak); img_icon.setBackgroundResource(mData.get(position).getaIcon()); txt_aName.setText(mData.get(position).getaName()); txt_aSpeak.setText(mData.get(position).getaSpeak()); return convertView; } ``` > 是吧,inflate()每次都要加載一次xml,其實這個convertView是系統提供給我們的可供服用的View 的緩存對象,那就坐下判斷咯,修改下,優化后的代碼: ``` @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null){ convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false); } ImageView img_icon = (ImageView) convertView.findViewById(R.id.img_icon); TextView txt_aName = (TextView) convertView.findViewById(R.id.txt_aName); TextView txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak); img_icon.setBackgroundResource(mData.get(position).getaIcon()); txt_aName.setText(mData.get(position).getaName()); txt_aSpeak.setText(mData.get(position).getaSpeak()); return convertView; } ``` ## 2.ViewHolder重用組件 > 嘿嘿,getView()會被調用多次,那么findViewById不一樣得調用多次,而我們的ListView的Item 一般都是一樣的布局,我們可以對這里在優化下,我們可以自己定義一個ViewHolder類來對這一部分 進行性能優化!修改后的代碼如下: ``` @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if(convertView == null){ convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false); holder = new ViewHolder(); holder.img_icon = (ImageView) convertView.findViewById(R.id.img_icon); holder.txt_aName = (TextView) convertView.findViewById(R.id.txt_aName); holder.txt_aSpeak = (TextView) convertView.findViewById(R.id.txt_aSpeak); convertView.setTag(holder); //將Holder存儲到convertView中 }else{ holder = (ViewHolder) convertView.getTag(); } holder.img_icon.setBackgroundResource(mData.get(position).getaIcon()); holder.txt_aName.setText(mData.get(position).getaName()); holder.txt_aSpeak.setText(mData.get(position).getaSpeak()); return convertView; } static class ViewHolder{ ImageView img_icon; TextView txt_aName; TextView txt_aSpeak; } ``` > 沒錯就是這么簡單,你以后BaseAdapter照著這個模板寫就對了,哈哈,另外這個修飾ViewHolder的 static,關于是否定義成靜態,跟里面的對象數目是沒有關系的,加靜態是為了在多個地方使用這個 Holder的時候,類只需加載一次,如果只是使用了一次,加不加也沒所謂!——**Berial(B神)原話~** ## 本節小結: > 好的,關于BaseAdapter的優化大概就上述的兩種,非常簡單,復用ConvertView以及自定義ViewHolder 減少findViewById()的調用~如果你有其他關于BaseAdapter優化的建議歡迎提出,謝謝~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看