7.22

<pre name="code" class="java">public class ListViewAdapter extends BaseAdapter
{
	Context mContext = ViewSavedCity.instance;
	//Context mContext = ViewSavedCity.this;
	private LayoutInflater inflater = (LayoutInflater) mContext.getSystemService("layout_inflater");
	@Override
	public int getCount()//控制该Adapter将会包含多少个列表项
	{	
		return ((ViewSavedCity)mContext).list.size();
	}

	@Override
	public Object getItem(int position) 
	{
	    //返回值决定第position处的列表项的内容
		return ((ViewSavedCity)mContext).list.get(position);
	}

	@Override
	public long getItemId(int position) 
	{
		//返回值决定第position处的列表项的内容
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) 
	{
		View view;
		ViewHolder holder = null;
		if (convertView == null) 
		{
				//setContentView()一旦调用, layout就会立刻显示UI;
				//而inflate只会把Layout形成一个以view类实现成的对象,
				//有需要时再用setContentView(view)显示出来。
				//一般在activity中通过setContentView()将界面显示出来,
				//但是如果在非activity中如何对控件布局设置操作了,
				//这就需要LayoutInflater动态加载。	
				convertView = inflater.inflate(R.layout.listview, parent, false);	
				view = convertView;
				holder = new ViewHolder();
                //findViewById 这个方法只有 activity和view才有。 自定义adapter并没有这个方法吧。
                //并且convertView.findViewById 还涉及到了listview的优化问题
                holder.cityName = (TextView)view.findViewById(R.id.cityName);
                holder.date = (TextView)view.findViewById(R.id.date);
                holder.temp = (TextView)view.findViewById(R.id.temp);
                holder.weather = (TextView)view.findViewById(R.id.weather);
                holder.index = (TextView)view.findViewById(R.id.index);
                view.setTag(holder);//将holder  添加到动态生成的View里面
                //控件声明都封装在holder里,执行Click事件要写holder.button.onClickListener...
                // findViewById()默认是访问setContentView(R.layout.xxxx);这个布局,如果是获取
                //一项item里的控件就要先找到item所在的布局layout文件获得一个view对象
                //然后用view.findViewById()
		} 
		else 
		{	
			holder=(ViewHolder) convertView.getTag();     	
        }
        holder.cityName.setText(String.valueOf(((ViewSavedCity)mContext).list.get(position).get("cityName")));
        holder.temp.setText(String.valueOf(((ViewSavedCity)mContext).list.get(position).get("temp")));
        holder.weather.setText(String.valueOf(((ViewSavedCity)mContext).list.get(position).get("weather")));
        holder.index.setText(String.valueOf(((ViewSavedCity)mContext).list.get(position).get("index")));
        holder.date.setText(String.valueOf(((ViewSavedCity)mContext).list.get(position).get("date_y")));
        //view.setTag(holder);//将holder  添加到动态生成的View里面
		
		setBackground(position,convertView);
		 // 为ListView设置隔行不同的背景颜色  
        
        // 返回的convertView对象将作为ListView的列表项  
		return convertView;
	}
	private class ViewHolder 
	{ 
		TextView cityName; 
		TextView temp;
		TextView weather;
		TextView date;
		TextView index;
	} 


 


 

考核第一轮过后代码任务可能不会特别重了,剩下该做的是完成翻页功能,按钮美化,重复按一个button的bug这几件事了,翻页功能刚刚终于测试成功了第二轮是面试加笔试,既要考java基础又要考android的知识。其实我越来越觉得除了研发其他工作室的招新好水..至于为什么水就不说了,有目共睹就好了。。

    今晚收到外婆心脏问题住院了,还因为心跳突然从40/min加速到140/min而被医院下了病危通知书,心情很复杂,很难过。外婆从小就对我们几个孩子不错,好的坏的我们小孩自己能分清楚,至少对我们,她是无私的。奶奶也因为胆结石住院了。难过这个暑假是我除了初三的暑假去北京度假的第二个没在家的暑假,没想到会有这么多事。听到这些事,我第一反应当然是我要回家。但是,我面对着考核,我真的不能放弃哭幸好他们都还没什么事,幸好爸妈他们很体谅我没要我赶回去让我留在学校完成好考核。么么哒,八月份再回家吧。

今天我想写一写关于listview的接口继承类baseadapter的重写,有时候我想偷懒不写,虽然我现在掌握了,但是我还是很怕我又忘了,所以还是写一写吧


  扩展BaseAdapter有很多的好处,如扩展BaseAdapter可以取得对Adapter最大的控制权:陈谷要创建多少个列表项,每个列表项的组件都由开发者也就是你自己来决定,而且在listview的接口上,扩展BaseAdapter有个很大的优势,那就是高效率!

扩展BaseAdapter主要需要重写如下四个方法

1.getCount():这个方法的返回值控制该Adapter将会包含多少个列表项

· 2.getItem(int position):该方法的返回值决定第position处的列表项的内容

3.getItemId(int positon):该方法的返回值决定第position处的列表项的ID

4.getView(int position,VIew convertView,ViewGroup parent):该方法的返回值决定第position处的列表项组件

下面我就将我天气预报查看保存城市的BaseAdapter重写的demo贴上来讲一讲怎么高效率了


ListView优化:通过convertView+ViewHolder来实现,ViewHolder就是一个静态类,使用 ViewHolder 的关键好处是缓存了显示数据的视图(View),加快了 UI 的响应速度。

当我们判断 convertView == null  的时候,如果为空,就会根据设计好的List的Item布局(XML),来为convertView赋值,并生成一个viewHolder来绑定converView里面的各个View控件(XML布局里面的那些控件)。再用convertView的setTag将viewHolder设置到Tag中,以便系统第二次绘制ListView时从Tag中取出。(看下面代码中)

如果convertView不为空的时候,就会直接用convertView的getTag(),来获得一个ViewHolder。

也就是说如果一个手机屏幕能显示多少项的item就产生多少个view,重复利用看不到的view  而不是再生成一个view,这如果在大量的数据中处理的话,是有很大优势的!

睡啦。。本来打算早点睡的。。码农的蛋疼  晚安




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值