關於ArrayAdapter中的getView函數

    我曾想利用ArrayAdapter中的getView來獲取ListView中每一個item的View對象。結果是,不管我怎麼對View對象進行更改都不產生影響。不會變是理所固然的,由於getView,實際上是」createView「。下面是我參考的源代碼:java

    

 public View getView(int position, View convertView, ViewGroup parent) {
        return createViewFromResource(position, convertView, parent, mResource);
    }

    private View createViewFromResource(int position, View convertView, ViewGroup parent,
            int resource) {
        View view;
        TextView text;

        if (convertView == null) {
            view = mInflater.inflate(resource, parent, false);
        } else {
            view = convertView;
        }

        try {
            if (mFieldId == 0) {
                //  If no custom field is assigned, assume the whole resource is a TextView
                text = (TextView) view;
            } else {
                //  Otherwise, find the TextView field within the layout
                text = (TextView) view.findViewById(mFieldId);
            }
        } catch (ClassCastException e) {
            Log.e("ArrayAdapter", "You must supply a resource ID for a TextView");
            throw new IllegalStateException(
                    "ArrayAdapter requires the resource ID to be a TextView", e);
        }

        T item = getItem(position);
        if (item instanceof CharSequence) {
            text.setText((CharSequence)item);
        } else {
            text.setText(item.toString());
        }

        return view;
    }


    從代碼來看,確定不多是我所想的那樣。若是convertView等於null,每次調用getView都是返回一個新的對象。可是,爲何呢?ui

    個人理解是,Adapter做爲Controller,向下從Model層中獲取數據,向上向View層提供對象。做爲給予者,不該該瞭解View層的信息。因此,經過Adapter來獲取View層的對象,這自己就是不可取的。spa

相關文章
相關標籤/搜索