我有一个listview,它使用自定义适配器从SQLite填充数据。我使用以下适配器。
public View getView(int pos, View child, ViewGroup parent) {
CustomerHolder mHolder;
LayoutInflater layoutInflater;
if (null == child) {
layoutInflater = (LayoutInflater) cContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
child = layoutInflater.inflate(R.layout.customer_info, null);
mHolder = new CustomerHolder();
mHolder.ccid = (TextView) child.findViewById(R.id.ccid);
mHolder.ccode = (TextView) child.findViewById(R.id.ttv1);
mHolder.cname = (TextView) child.findViewById(R.id.cname);
mHolder.cspcode = (TextView) child.findViewById(R.id.cspcode);
mHolder.ctype = (TextView) child.findViewById(R.id.ctype);
child.setTag(mHolder);
}
else
{
mHolder = (CustomerHolder) child.getTag();
}
mHolder.ccid.setText(cid.get(pos));
mHolder.ccode.setText(ccode.get(pos));
mHolder.cname.setText(cname.get(pos));
mHolder.cspcode.setText(cspcode.get(pos));
mHolder.ctype.setText(ctype.get(pos));
return child;
}
public class CustomerHolder {
TextView ccid;
TextView ccode;
TextView cname;
TextView cspcode;
TextView ctype;
}
我面临的问题是,listview会填充数据,但每个列表项都是重复的。我在StackOverflow中经历了一些问题,但是,没有一个解决方案适合我。
答案 0 :(得分:0)
我已经检查了我的适配器,只是与你的代码的不同之处在于我只实例化了一次LayoutInflater,而不是在每次getView调用时实例化,而我在创建时就是这样做。
private final LayoutInflater inflater;
(...)
public PropertyListAdapter(Context context) {
super(context, 0, new ArrayList<PropertyListItem>());
this.context = context;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
(...)
}
第二件事是我的Holder类是静态的:
static class AdViewHolder {
public AdView adView;
public ProgressBar progressBar;
}
其他所有内容都与您的代码相同。相同的模式。因此,如果这些更改无效,请尝试检查您的对象/项目列表是否偶然包含相同的对象。
啊,第三件事 - 因为我的持有人是静态的:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
AdViewHolder adHolder = null;
if (convertView == null) {
(...)
}
我把它归零。
答案 1 :(得分:0)
那个适配器很好。您复制了数据库中的数据。