今天学习在编写布局文件的时候遇到Element type "LinearLayout" must be followed by either attribute specifications, ">" or "/>".这个问题,google了一下才发现是自己忘记在<LinearLayout 后面添加>了,确切的说应该是把EditText和Button两个放在了<LinearLayout 里面了,导致的问题出错。而不是在<LinearLayout> </LinearLayout>中间。
上午学习了ListView,感觉比之前的要复杂一些。为了优化效率,提高运行的速度,需要对布局和获取控件进行缓存,达到优化目的。
1.布局缓存。convertView
在getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存
if(convertView==null){
view=LayoutInflater.from(getContext()).inflate(resourceId, null);
else{
view=convertView;
}
在getView()方法中进行判断,当convertView为空,用LayoutInflater加载布局,不为空时,直接对convertView进行重用,提升ListView效率。
2.控件缓存。ViewHolder
ViewHolder需要自己创建一个类,可以对View的findViewById()方法进行优化,还是以上面的为例。
View view;
ViewHolder viewHolder;
if(convertView==null){
view=LayoutInflater.from(getContext()).inflate(resourceId, null);
viewHolder=new ViewHolder();
viewHolder.fruitImage=(ImageView) view.findViewById(R.id.fruit_image);
viewHolder.fruitName=(TextView) view.findViewById(R.id.fruit_name);
view.setTag(viewHolder);
}else{
view=convertView;
viewHolder=(com.example.listviewtest.ViewHolder) view.getTag();
}
<