学了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;
  }
}BaseAdapter优化android

解决方案 »

  1.   

    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;
    }
      

  2.   

    我理解的 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;
    }
      

  3.   

    我也明白它是定义好的,我就想看看它究竟的原理,是不是一个简单的上次用过View,而且替换后可以一次定义多次使用,发现我想多了。。谢谢的你回答