当前位置: 代码迷 >> Android >> BaseAdapter的getView有关问题
  详细解决方案

BaseAdapter的getView有关问题

热度:41   发布时间:2016-05-01 14:18:42.0
BaseAdapter的getView问题
getView的代码如下:
Java code
    public View getView(int position, View convertView, ViewGroup parent) {        Log.i(TAG, "getView -- " + position + " -- " + convertView);                ViewHolder holder = null;        if(convertView == null){            convertView = mInflater.inflate(R.layout.list_item, null);            holder = new ViewHolder();            holder.ivPic = (ImageView) convertView.findViewById(R.id.iv_pic);            holder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title);            holder.cbSelect = (CheckBox) convertView.findViewById(R.id.cb_selected);            holder.btOk    = (Button) convertView.findViewById(R.id.btn_ok);                        convertView.setTag(holder);        } else{            holder = (ViewHolder) convertView.getTag();        }                convertView.setOnClickListener(new OnClickListener() {                        public void onClick(View v) {//                viewHolder.cbSelect.toggle();                Log.i(TAG, "click the convertView at ");            }        });                holder.btOk.setOnClickListener(new OnClickListener() {                        public void onClick(View v) {                Log.i(TAG, "click the button");            }        });                holder.ivPic.setBackgroundResource(list.get(position).getPicId());        holder.tvTitle.setText(list.get(position).getTitle());                return convertView;    }


我用的是模拟器,一屏显示了10个Item。
但是在logcat中查看日志,0--9 的视图getView方法被调用了三遍,listView加载完成后我不进行任何滑动
日志内容如下:
AndroidRuntime(577): NOTE: attach of thread 'Binder Thread #3' failed
getView -- 0 -- null
getView -- 1 -- [email protected]
getView -- 2 -- [email protected]
getView -- 3 -- [email protected]
getView -- 4 -- [email protected]
getView -- 5 -- [email protected]
getView -- 6 -- [email protected]
getView -- 7 -- [email protected]
getView -- 8 -- [email protected]
getView -- 9 -- [email protected]
getView -- 0 -- [email protected]
getView -- 1 -- null
getView -- 2 -- null
getView -- 3 -- null
getView -- 4 -- null
getView -- 5 -- null
getView -- 6 -- null
getView -- 7 -- null
getView -- 8 -- null
getView -- 9 -- null
getView -- 0 -- null
getView -- 1 -- [email protected]
getView -- 2 -- [email protected]
getView -- 3 -- [email protected]
getView -- 4 -- [email protected]
getView -- 5 -- [email protected]
getView -- 6 -- [email protected]
getView -- 7 -- [email protected]
getView -- 8 -- [email protected]
getView -- 9 -- [email protected]
Displayed com.lxy/.AppMainActivity: +1s282ms

应该只加载1--9一次,并且convertView是null才对吧,我没有滑动过。这是为什么呢?

------解决方案--------------------
不是只加载0~9一次,是加载0~9两次。因为第一次切换到这里,convertView没有缓存的话,先0~9创建了之后,再0~9做一次显示。比如
getView -- 0 -- null
getView -- 1 -- null
getView -- 2 -- null
getView -- 3 -- null
getView -- 4 -- null
getView -- 5 -- null
getView -- 6 -- null
getView -- 7 -- null
getView -- 8 -- null
getView -- 9 -- null
getView -- 0 -- [email protected]
getView -- 1 -- [email protected]
getView -- 2 -- [email protected]
getView -- 3 -- [email protected]
getView -- 4 -- [email protected]
getView -- 5 -- [email protected]