Android 适配器问题

2025-03-25 19:48:55
推荐回答(1个)
回答1:

把getView改写成如下形式:
public View getView(int arg0, View arg1, ViewGroup arg2) {
ViewHolder vh;
if(arg1==null) {
vh=new ViewHolder();
arg1=LayoutInflater.from(context).inflate(R.layout.activity_salemanjoureadd, null);
vh.CustomerName=(TextView) arg1.findViewById(R.id.CustomerName);
vh.purpose=(TextView) arg1.findViewById(R.id.purpose);
vh.result=(TextView) arg1.findViewById(R.id.result);
vh.cause=(TextView) arg1.findViewById(R.id.cause);
arg1.setTag(vh);

} else {
vh = (ViewHolder)arg1.getTag();

}
String value=list.get(arg0);
Log.e("value",value);
String split[]=value.split(",");
String purpose=split[0];
String result=split[1];
String cause=split[2];
String Customer=split[3];
vh.CustomerName.setText(Customer);
Log.e("value1",purpose);
vh.purpose.setText(purpose);
Log.e("value2",result);
vh.result.setText(result);
Log.e("value3",cause);
vh.cause.setText(cause);
return arg1;
}

错误有3处:
1、每一次调getView只要返回一项,其中arg0就是项的下标。
2、你原来的函数里只有arg1==null的时候才工作,事实上android有可能重用View,所以arg1有可能不是空的。

3、ViewHolder要用setTag保存,以便下次可以拿出来用。