繼承BaseAdapter覆寫getView()方法解析

當咱們繼承BaseAdapter自定義適合本身使用的Adapter時候,不可避免的要覆寫getView()方法。本身在分析藍牙4.0官方源代碼遇到這個問題,分析了幾遍,有所領悟,參考了這篇博文http://blog.csdn.net/pkxiuluo01/article/details/7380974,現結合藍牙4.0官方的這部分代碼將getView()解析一下。java

//當界面每顯示出來一個item時,就會調用該方法,getView()有三個參數,第一個參數表示該item在Adapter中的位置;第二個參數是item的View對象,是滑動list時將要顯示在界面上的item,若是有item在顯示界面消失,這時android會將消失的item返回,稱爲舊view,也就是說此時的view不爲null;第三個參數用在加載xml視圖。
public View getView(int i, View view, ViewGroup viewGroup) {
            ViewHolder viewHolder;
            // General ListView optimization code.
            if (view == null) {//當滑動list時,若是沒有item消失,這時參數對象view是沒有任何指向的,爲null
                view = mInflator.inflate(R.layout.listitem_device, null);//mInflator是LayoutInflater類(佈局加載器)實例對象,該行是動態加載佈局
                viewHolder = new ViewHolder();//得到實例對象
                viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_address);//分別實例化顯示Name和Address的textView控件
                viewHolder.deviceName = (TextView) view.findViewById(R.id.device_name);
                view.setTag(viewHolder);//向view中添加附加數據信息,在這裏也就是兩個textView對象
            } else {
                viewHolder = (ViewHolder) view.getTag();//若是有舊的view對象返回(該狀況是滑動list時有item消失),從該view中提取建立的兩個已經建立的textView對象,達到對象循環使用
            }
            BluetoothDevice device = mLeDevices.get(i);//從搜索到的設備列表中獲得顯示位置設備對象。
            final String deviceName = device.getName();
            if (deviceName != null && deviceName.length() > 0)
                viewHolder.deviceName.setText(deviceName);//輸出顯示設備SSID
            else
                viewHolder.deviceName.setText(R.string.unknown_device);
            viewHolder.deviceAddress.setText(device.getAddress());//輸出顯示設備地址信息

            return view;
        }
.....
static class ViewHolder { //該類用來暫存textView的實例化對象,達到循環使用
        TextView deviceName;
        TextView deviceAddress;
    }
.....
相關文章
相關標籤/搜索