一个ListView使用多个布局文件

本文介绍如何通过自定义Adapter并重写特定方法,实现Android ListView中不同布局的交替显示。主要步骤包括定义布局标识、重写getViewTypeCount及getItemViewType方法,以及在getView方法中根据位置决定加载哪种布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步( 个人习惯):

            因为我是两个布局文件,所以先初始化两个常量,来区分我所使用的到底是哪个布局;

            private static final int LEFT = 0;
            private static final int RIGHT = 1;

第二部:

            在自定义Adapter中继承BaseAdapter其它的方法都是一样的,只是多重写了两个方法(记住这两个方法一定要配套使用):

              1)getViewTypeCount():这个方法的返回值是ListView中一共有几个要显示的视图;

              2)getItemViewType(int position):这个方法是制定适配器显示当前position位置数据时,应该使用哪个视图;

第三部:

            在给getVIew方法中判断getItemViewType()方法的返回值和我初始化的两个常量进行判断,来确定使用那个布局:


              具体代码实现:

方法===============================================================================================================================================================================

            @Override
       public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final ViewHolder holder;
        if (convertView == null) {

            if(getItemViewType(position) ==LEFT) {
                convertView = inflater.inflate(R.layout.sms_detail_left_item,
                        parent, false);
            }else{
                convertView = inflater.inflate(R.layout.sms_detail_right_item,
                        parent, false);
            }

            holder = new ViewHolder();

            holder.imgPhoto = (ImageView) convertView
                    .findViewById(R.id.img_detail_photo);
            holder.tvDate = (TextView) convertView
                    .findViewById(R.id.tv_item_date);
            holder.tvBody = (TextView) convertView
                    .findViewById(R.id.tv_detail_body);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        
        return convertView;
    }

============================================================================================
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值