试着写了写简单的代码,想看看getView是什么时候执行和怎么执行的
代码如下:
- Java code
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) = [email protected]
08-08 05:23:29.988: V/(2450): View(1) = [email protected]
08-08 05:23:29.988: V/(2450): View(2) = [email protected]
08-08 05:23:30.018: V/(2450): View(0) = [email protected]
08-08 05:23:30.038: D/gralloc_goldfish(2450): Emulator without GPU emulation detected.
这里我就不明白了,为什么会为第0条数据创建了两次view?这是第一个问题....
之后我修改了一下代码,记录下了给第0条创建的两个view,然后分别修改两个view的BackgroundColor,发现只有修改第一次创建的view的时候器作用,修改第二次创建的view时没有效果。那第二次创建的view去哪了?
------解决方案--------------------
确实多次调用的,这个可以不要管,系统就这样搞的,需要不断的刷新显示