Android ArrayAdapters convertviews标记在更新后为空

Android ArrayAdapters convertviews标记在更新后为空,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,我正在尝试更新我的自定义ArrayAdapter,但在调用UpdateListaray后,调用了getView,convertview不为null,但标记为null,这给了我错误。如果我做了一个额外的空检查并设置了一个新的viewholder,它只会显示错误的内容。 我就是不明白为什么这会给我带来问题,我有以下代码: public class CustomAdapter extends ArrayAdapter<Item> { private ArrayLis

我正在尝试更新我的自定义ArrayAdapter,但在调用UpdateListaray后,调用了getView,convertview不为null,但标记为null,这给了我错误。如果我做了一个额外的空检查并设置了一个新的viewholder,它只会显示错误的内容。 我就是不明白为什么这会给我带来问题,我有以下代码:

    public class CustomAdapter extends ArrayAdapter<Item> {
        private ArrayList<Item> mListItems;

        public CustomAdapter (Context context, int rowResourceId, ArrayList<Item> items) {
            super(context, rowResourceId, items);
            mListItems = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if(convertView == null) {
                // setup holder
                holder = new ViewHolder();

                convertView = mInflater.inflate(R.layout.list_row, null);

                holder.mEventStart = (TextView) convertView.findViewById(R.id.row_date);
                holder.mTitle = (TextView) convertView.findViewById(R.id.row_artist);
                holder.mSubTitle = (TextView) convertView.findViewById(R.id.row_description);

                holder.mImage = (ImageView) convertView.findViewById(R.id.row_artist_image);
                holder.mScene = (ImageView) convertView.findViewById(R.id.row_scene_image);
                holder.mStatus = (ImageView) convertView.findViewById(R.id.row_new);
                holder.mRowParent = (View) convertView.findViewById(R.id.row_parent);

            } else {
                // get existing row view
                holder = (ViewHolder) convertView.getTag();
            }

            //setup row view content
            if(!mListItems.isEmpty()) {
//set content
            }
            return convertView;
        }

        public void updateListArray(ArrayList<Item> list) {
            this.clear();
            for(Item item : list) {
                this.add(item);
            }
            mListItems = list;
            notifyDataSetChanged();
        }
公共类CustomAdapter扩展了ArrayAdapter{
私人阵列列表;
公共CustomAdapter(上下文上下文、int-rowResourceId、ArrayList项){
超级(上下文、rowResourceId、项);
mListItems=项目;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
//安装支架
holder=新的ViewHolder();
convertView=mInflater.充气(R.layout.list_行,空);
holder.mEventStart=(TextView)convertView.findViewById(R.id.row\u日期);
holder.mTitle=(TextView)convertView.findViewById(R.id.row_);
holder.mSubTitle=(TextView)convertView.findViewById(R.id.row_说明);
holder.mImage=(ImageView)convertView.findViewById(R.id.row\u artist\u image);
holder.mScene=(ImageView)convertView.findViewById(R.id.row\u scene\u image);
holder.mStatus=(ImageView)convertView.findViewById(R.id.row\u new);
holder.mRowParent=(视图)convertView.findViewById(R.id.row\u parent);
}否则{
//获取现有行视图
holder=(ViewHolder)convertView.getTag();
}
//设置行视图内容
如果(!mListItems.isEmpty()){
//设置内容
}
返回视图;
}
公共无效更新Starray(ArrayList列表){
这个.clear();
用于(项目:列表){
本条增加(项目);
}
mListItems=列表;
notifyDataSetChanged();
}

除非您使用了setTag(),否则getTag()将为null。如果您删除对getTag()的调用,它可能会按照您的意愿工作。

您在哪里设置标记?如果您不设置,它将为null…@WarrenFaith我无法感谢您太好了,先生:),convertview.setTag(holder);应该在最后一个holder.element下面。