试着写了写简单的代码,想看看getView是什么时候执行和怎么执行的
代码如下:package com.test.activity;import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;public class EasyTestActivity extends Activity {
    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        GridView gridView = (GridView)findViewById(R.id.GridView1);
        
        CustomAdapter adapter = new CustomAdapter(this, android.R.layout.simple_expandable_list_item_1, new String[] {"1","2","3"});
        
        gridView.setAdapter(adapter);
    }
    
    public class CustomAdapter extends ArrayAdapter<String> { public CustomAdapter(Context context, int resource,
String[] objects) {
super(context, resource, objects);
// TODO Auto-generated constructor stub
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = super.getView(position, convertView, parent);

//在这里输出是为第几条创建View和View的地址
Log.v(new String(), 
  "View(" + String.valueOf(position) + ")" + " = " + convertView.toString());
}
return convertView;
}
    
    }
}
执行的时候,输出的结果是:
08-08 05:23:29.678: I/dalvikvm(2450): Wrote stack traces to '/data/anr/traces.txt'
08-08 05:23:29.939: V/(2450): View(0) = android.widget.TextView@412c7f88
08-08 05:23:29.988: V/(2450): View(1) = android.widget.TextView@412c9b48
08-08 05:23:29.988: V/(2450): View(2) = android.widget.TextView@412ca478
08-08 05:23:30.018: V/(2450): View(0) = android.widget.TextView@412cb150
08-08 05:23:30.038: D/gralloc_goldfish(2450): Emulator without GPU emulation detected.
这里我就不明白了,为什么会为第0条数据创建了两次view?这是第一个问题....之后我修改了一下代码,记录下了给第0条创建的两个view,然后分别修改两个view的BackgroundColor,发现只有修改第一次创建的view的时候器作用,修改第二次创建的view时没有效果。那第二次创建的view去哪了?

解决方案 »

  1.   


    我在意的是他给同一条记录生成了两个一样的view,第二次生成的view虽然不影响显示但一直存在着,这样不会占用多余的内存吗
      

  2.   

    if(convertView == null) {
    //这个里面就inflate convertview
    }
    后面就,通过convertview.findviewbyid来搞,设置内容
    return convertView;不会浪费
      

  3.   


    我这里面不是已经判断了吗?就是因为判断出convertView是null,所以才会输出第二次生成的结果。我原来以为是把第一次的生成的view销毁了才执行第二次生成的,但是同时记录下两次的view以后才发现问题:
    一是为什么第二次跑到第0条的时候,会判断出convertView是null?
    二是为什么既然判断是null了,并生成了新的view,为什么旧的view没有销毁?
    三室为什么对旧的view操作可以产生效果,对新的view操作却不产生效果?
      

  4.   

    view不会销毁,会放在recycle bin中,listview会负责管理。具体的实现我也不清楚,代码太多了
      

  5.   

     android:layout_height="fill_parent",
    不知道你是不是这个原因。
    http://blog.csdn.net/f8376904110/article/details/6460934