BaseAdapter的getView()方法_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > BaseAdapter的getView()方法

BaseAdapter的getView()方法

 2013/11/20 12:33:48  MSTK  博客园  我要评论(0)
  • 摘要:getView()是BaseAdapter的一个重要方法。为了研究getView()方法,使用了以下的类。//apk列表classlist_apkextendsBaseAdapter{privateContextctx;privateList<item_apk>list_data;publiclist_apk(Contextcontext){ctx=context;list_data=newArrayList<item_apk>();
  • 标签:方法 view ASE

getView()是BaseAdapter的一个重要方法。为了研究getView()方法,使用了以下的类。

class="brush:java;gutter:true;">// apk列表
class list_apk extends BaseAdapter{
	
	 private Context ctx;
     private List<item_apk> list_data;
	
	public list_apk(Context context){
		
		ctx = context;
		list_data = new ArrayList<item_apk>();
		
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list_data.size();
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return list_data.get(arg0);
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return list_data.indexOf(arg0);
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {

        item_apk my_item; 
        
        Log.i("position=", String.valueOf(position));
        
        if (convertView==null) 
        {  
            Log.i("convertView=", "null");
        	my_item = new item_apk(ctx,
        			(String)list_data.get(position).txt_name.getText(),
        			(String)list_data.get(position).txt_flag.getText(),
            		list_data.get(position).img_apk.getDrawable());  
        }
        else 
        {  
            Log.i("convertView=", convertView.toString());
        	my_item = (item_apk)convertView;  
        	my_item.txt_name = list_data.get(position).txt_name;  
        	my_item.txt_flag = list_data.get(position).txt_flag; 
        	my_item.img_apk = list_data.get(position).img_apk;  
        }  
        return my_item; 
	
	}
	
    public void addItem(String txt_name, String txt_flag, Drawable ico_apk)
    {  
    	list_data.add(new item_apk(ctx,txt_name,txt_flag,ico_apk));	            	
    }
    
}

初次运行时截图如下:

此时LogCat的截图如下:

可见初次运行时,convertView都是null,此时初始化了13个View,每一个View对应列表里面的一行,即一个屏幕有13行,13个View。

把屏幕向下滑动,LogCat的截图如下:

注意com.hzhi.sysinfor.item_apk@407e26f8出现了两次,第一次显示position=13,第二次显示position=26,这是因为向下滑动时,该View(position=13)从屏幕上方消失了,然后出现在屏幕下方,显示position=26。

把屏幕向上滚动时LogCat的截图如下:

按理说向下滑动时,屏幕最后一行position=91消失了,此时应该在屏幕最上方显示position=78了才对,为什么显示position=79呢?这是因为滑动之前,position=79并没有被完全显示,滑动以后,首先重新完全显示了position=79,然后再显示position=78。

总结:不管怎样滑动屏幕,列表的第0行、第0+n行、第0+2*n行、......对应的都是同一个View,其中n是一个屏幕显示的行数,比如本例中第0、13、26、......对应的View都是com.hzhi.sysinfor.item_apk@407e26f8。

发表评论
用户名: 匿名