使用自定义适配器更新列表视图

时间:2015-10-31 19:11:52

标签: android listview android-listview

我正在使用自定义数组适配器将数据添加到自定义列表视图中 请告诉我如何更新此listview和适配器 我第一次使用add()notifyDataSetChanged()将项目添加到我的listview数组适配器时它工作正常,但第二次我做同样的但它给我错误我读到某处我必须添加一个方法到我的适配器来处理这个像addMoreItem或其他东西 这是我的适配器

public class StringArrayAdapter extends ArrayAdapter<ContentSetter> {
ArrayList<ContentSetter> postList;
private int mCount = 20;
LayoutInflater myInflater;
int Resource;
ViewHolder holder;

public StringArrayAdapter(Context c , int resource  , ArrayList<ContentSetter> obj) {
    super(c , resource ,obj);
    myInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    Resource = resource;
    postList = obj;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        holder = new ViewHolder();
        v = myInflater.inflate(Resource, null);
        holder.name = (TextView) v.findViewById(R.id.mahdi);
    } else {
        holder = (ViewHolder)v.getTag();
    }
    holder.name.setText(postList.get(position).getPostId());
    return v;
}
static class ViewHolder{
    public TextView name;
}

}

1 个答案:

答案 0 :(得分:0)

来自您发布的代码:

首先:

请确保ArrayList<ContentSetter> obj不为空。超类不会检查空值。

第二:这里

if (v == null) {
    holder = new ViewHolder();
    v = myInflater.inflate(Resource, null);
    holder.name = (TextView) v.findViewById(R.id.mahdi);
} else {
    holder = (ViewHolder)v.getTag();
}

在初始化v.setTag(holder)后,您需要在if条件中致电holder

if (v == null) {
    holder = new ViewHolder();
    v = myInflater.inflate(Resource, null);
    holder.name = (TextView) v.findViewById(R.id.mahdi);
    v.setTag(holder);
}

第三

如果getPostId()返回int,则应该换行是String.valueOf周围的返回值。 setText的重载方法,它尝试查找本地化字符串,如果找不到匹配则抛出异常