BaseAdapter优化问题

xiong1250 2013-09-20 06:24:19
学了BaseAdapter优化问题,感觉还能优化一点,就自己写个方法想实验下,图片总是不能加载完全只有一张,有人帮我看看或者跟我说说conertView底层到底怎么回事,怎么就替代不了呢

public class baseAdapterActivity1 extends Activity{
LayoutInflater li;
ViewHolder vh=new ViewHolder();
ListView lv;
int []pp={R.drawable.b,R.drawable.bg4,R.drawable.m,R.drawable.m2,R.drawable.m3,R.drawable.m8,R.drawable.p,R.drawable.psb};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.baselist);
lv=(ListView) findViewById(R.id.b_lv);
li=getLayoutInflater();
vh.cont=li.inflate(R.layout.b_item, null);
vh.tv=(TextView) vh.cont.findViewById(R.id.b_tv);
vh.iv=(ImageView) vh.cont.findViewById(R.id.b_iv);
lv.setAdapter(new BaseAdapter() {

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v=vh.cont;
vh.tv.setText("图片"+(position+1));
vh.iv.setImageResource(pp[position]);
System.out.println(position);
return v;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return pp.length;
}
});
lv.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Intent in=new Intent("look");
in.putExtra("pp", pp);
in.putExtra("p", arg2);
startActivity(in);
}
});

}
static class ViewHolder{
View cont;
TextView tv;
ImageView iv;
}
}
...全文
168 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiong1250 2013-10-26
  • 打赏
  • 举报
回复
引用 3 楼 leehu1987 的回复:
我理解的 View convertView 指的是listview里面的每一行view,是定义好的。你需要做的是在convertview基础上进行修改,而不是将他替换掉。 if (convertView == null) { convertView = li.inflate(R.layout.b_item, null); vh.tv=(TextView) v.findViewById(R.id.b_tv); vh = new ViewHolder(); vh.tv=(TextView) v.findViewById(R.id.b_tv); vh.iv=(ImageView) v.findViewById(R.id.b_iv); convertView.setTag(holder); convertView.setTag(holder); } else { vh = (ViewHolder) convertView.getTag(); } vh.tv.setText("图片"+(position+1)); vh.iv.setImageResource(pp[position]); return convertView; } // 单独的类ViewHolder private class ViewHolder { private TextView tv; private ImageView iv; }
我也明白它是定义好的,我就想看看它究竟的原理,是不是一个简单的上次用过View,而且替换后可以一次定义多次使用,发现我想多了。。谢谢的你回答
xiong1250 2013-09-23
  • 打赏
  • 举报
回复
没人能给解决下吗
酒比花香 2013-09-23
  • 打赏
  • 举报
回复
我理解的 View convertView 指的是listview里面的每一行view,是定义好的。你需要做的是在convertview基础上进行修改,而不是将他替换掉。 if (convertView == null) { convertView = li.inflate(R.layout.b_item, null); vh.tv=(TextView) v.findViewById(R.id.b_tv); vh = new ViewHolder(); vh.tv=(TextView) v.findViewById(R.id.b_tv); vh.iv=(ImageView) v.findViewById(R.id.b_iv); convertView.setTag(holder); convertView.setTag(holder); } else { vh = (ViewHolder) convertView.getTag(); } vh.tv.setText("图片"+(position+1)); vh.iv.setImageResource(pp[position]); return convertView; } // 单独的类ViewHolder private class ViewHolder { private TextView tv; private ImageView iv; }
xiong1250 2013-09-20
  • 打赏
  • 举报
回复
BaseAdapter原型:

lv=(ListView) findViewById(R.id.b_lv);
	li=getLayoutInflater();

	//vh.tv=(TextView) vh.cont.findViewById(R.id.b_tv);
	//vh.iv=(ImageView) vh.cont.findViewById(R.id.b_iv);
	lv.setAdapter(new BaseAdapter() {
		
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			View v=convertView;
			if(v==null){
				v=li.inflate(R.layout.b_item, null);
				vh.tv=(TextView) v.findViewById(R.id.b_tv);
				vh.iv=(ImageView) v.findViewById(R.id.b_iv);
				v.setTag(vh);
			}
			else
				vh=(ViewHolder) v.getTag();
			vh.tv.setText("图片"+(position+1));
			vh.iv.setImageResource(pp[position]);
			System.out.println(position);
			return v;
		}

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧