关于ListView的getItemViewType()这个方法的踩坑叙述

在Android开发中,当需要在ListView中创建带有标签区分不同数据类型的列表时,getItemViewType()方法至关重要。该方法用于确定每个item的视图类型,而getViewTypeCount()则返回不同视图类型的数量。在实现过程中,由于错误地定义了ItemViewType的值,导致出现异常。异常信息主要出现在ListView的onMeasure()方法中。此博客旨在提醒开发者避免此类错误,确保ListView正确显示各类item。
摘要由CSDN通过智能技术生成

有时候我们需要做一个类似下图的列表,如下,每隔几个item就需要一个标签来区分不同的数据类型,这个时候就需要用到getItemViewType()来做区分了

BaseAdapter中有2个方法:

1.getItemViewType(int position);//得到当前item的类型

2.getViewTypeCount()//得到不同的item的总数,下面图上的类型是2种

//下面贴一段代码(因为完整的项目需要关系很多代码,所以只贴Adapter的代码)

package com.yy.ent.mobile.ui.live.livelist;

import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.yy.ent.cherry.Cherry;
import com.yy.ent.cherry.ext.image.CircleImageView;
import com.yy.ent.cherry.ext.image.ImageConfig;
import com.yy.ent.cherry.ext.image.ImageManager;
import com.yy.ent.cherry.ext.image.RecycleImageView;
import com.yy.ent.mobile.entity.livelist.Lives;
import com.yy.ent.mobile.ui.base.XBaseAdapter;
import com.yy.ent.mobile.ui.live.widget.RayRelative;
import com.yy.ent.mobile.ui.personal.OthersActivity;
import com.yy.ent.mobile.ui.util.NavigationUtils;
import com.yy.ent.mobile.ui.util.StringUtils;
import com.yy.ent.mobile.ui.util.ViewHelper;
import com.yy.ent.show.ui.R;

 
public class ShowLiveAdapter extends XBaseAdapter<Lives> {
    public static final String MOBILE_LIVE_ITEM_CLICK = "mobile_live_item_click";
    private static final int VIEW_COUNT = 2;

    public static final int LIVE_HEADER = 0;
    public static final int LIVE_CONTENT = 1;

    public static final int HEADER_TAG = 110;
    private String TAG = ShowLiveAdapter.class.getSimpleName();

    public ShowLiveAdapter(Context context, int resource) {
        super(context, resource);
    }

    @Override
    public int getItemViewType(int position) {
        if (list.get(position).status == HEADER_TAG) {
            return LIVE_HEADER;
        } else {
            return LIVE_CONTENT;
        }
    }

    @Override
    public int getViewTypeCount() {
        return VIEW_COUNT;
    }

    @Override
    public View getYView(int i, View itemView, ViewGroup viewGroup) {
        ViewHolder holder = null;
        int type = getItemViewType(i);
        if (itemView == null) {
            switch (type) {
                case LIVE_HEADER:
                    TextView hot = new Te
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值