向持有人

时间:2016-02-11 08:26:36

标签: java android listview android-adapter

我正在尝试使用持有者创建ListView,并在滚动时添加更多项目。问题是,我的适配器无法将新项目识别为新项目。在这一点上我很困惑。这有什么不对?

我的适配器getView方法的简化版本:

public View getView(final int position, View convertView, ViewGroup parent) {
        final MyHolder holder;
        if (convertView == null) {
            LayoutInflater li = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = li.inflate(R.layout.empty_item, null);
            holder = new MyHolder();
            convertView.setTag(holder);
            holder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);

        } else {
            holder = (MyHolder) convertView.getTag();
        }

        return convertView;
}

MyHolder:

class MyHolder {

        public TextView tvTitle;

}

所以前3个项目进入convertview==null,但其余的则没有。这可能是什么问题?

1 个答案:

答案 0 :(得分:0)

1)向适配器添加新项目时,必须致电notifyDataSetChanged()以通知附加的观察者数据更改并刷新您的观点。

2)当需要为新项目/布局充气时,您的if区块(convertview==null)将被执行,否则将调用{{ 1}}阻止回收旧的。

这是ListView's recycling mechanism的工作方式: