当前位置: 代码迷 >> Android >> BaseAdapter优化有关问题
  详细解决方案

BaseAdapter优化有关问题

热度:7   发布时间:2016-04-28 07:34:35.0
BaseAdapter优化问题
学了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

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