Adapter中getItemViewType和getViewTypeCount的用法

本文介绍了一种自定义的Android新闻列表适配器实现方式,该适配器支持两种不同类型的视图布局,并利用Universal Image Loader加载图片,同时实现了缓存策略。

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

package com.example.zhangjinling0907;

import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;



import java.util.List;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;

import static android.R.attr.path;
import static android.content.ContentValues.TAG;




class MyAdapter  extends BaseAdapter {

        List<DataBean.NewslistBean> list;
        Context context;
    private static final int typeOne = 0;
    private static final int typeTwo = 1;

    public MyAdapter(List<DataBean.NewslistBean> list, Context context) {
            this.list = list;
            this.context = context;
        }

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int i) {
            return list.get(i);
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            ViewHolderOne holderOne=null;
            ViewHolderTwo holderTwo=null;
            int type = getItemViewType(i);

            if (view == null){
                switch (type) {
                    case typeOne:
                        holderOne = new ViewHolderOne();
                        view = View.inflate(context, R.layout.item_layout,null);

                        holderOne.img_01 = (ImageView) view.findViewById(R.id.img_01);
                        holderOne.img_02 = (ImageView) view.findViewById(R.id.img_02);
                        holderOne.img_03 = (ImageView) view.findViewById(R.id.img_03);
                        
                        holderOne.text_author = (TextView) view.findViewById(R.id.text_author);
                        holderOne.text_title = (TextView) view.findViewById(R.id.text_title);
                        holderOne.text_time = (TextView) view.findViewById(R.id.text_time);
                        view.setTag(holderOne);
                        break;
                    case typeTwo:
                        holderTwo = new ViewHolderTwo();
                        view = View.inflate(context, R.layout.itemtwo_layout,null);

                        holderTwo.imgtwo_01=(ImageView) view.findViewById(R.id.imgtwo_01);
                        holderTwo.texttwo_title=(TextView) view.findViewById(R.id.texttwo_title);
                        view.setTag(holderTwo);
                        break;
                    default:
                        break;
                }
            }
            switch (type) {
                case typeOne:
                    
                    holderOne= (ViewHolderOne) view.getTag();
                    holderOne.text_author.setText(list.get(i).getDescription());
                    holderOne.text_title.setText(list.get(i).getTitle());
                    holderOne.text_time.setText(list.get(i).getCtime());
                    
                    DisplayImageOptions options = new DisplayImageOptions.Builder()
                            .showImageOnLoading(R.drawable.img_in)            //加载图片时的图片
                            .showImageForEmptyUri(R.drawable.img_er)         //没有图片资源时的默认图片
                            .showImageOnFail(R.drawable.img_on)              //加载失败时的图片
                            .cacheInMemory(true)                               //启用内存缓存
                            .cacheOnDisk(true)                                 //启用外存缓存
                            .considerExifParams(true)                          //启用EXIF和JPEG图像格式
                            .displayer(new RoundedBitmapDisplayer(20))         
                            .build();
                    ImageLoader.getInstance().displayImage(list.get(i).getPicUrl().toString(), holderOne.img_01, options);
                    ImageLoader.getInstance().displayImage(list.get(i).getPicUrl().toString(), holderOne.img_02, options);
                    ImageLoader.getInstance().displayImage(list.get(i).getPicUrl().toString(), holderOne.img_03, options);


                    break;
                case typeTwo:
                   holderTwo= (ViewHolderTwo) view.getTag();
                   holderTwo.texttwo_title.setText(list.get(i).getDescription());
                    ImageLoader.getInstance().displayImage(list.get(i).getPicUrl().toString(), holderTwo.imgtwo_01);

                    break;
                default:
                    break;
            }
            return view;
        }

    @Override
    public int getItemViewType(int position) {
        int  postype=position%2;

      if (postype==0){
      return typeOne ;
       }else {
          return typeTwo ;
      }
    }

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

    class ViewHolderOne{
            TextView text_title;
            TextView text_author;
            TextView text_time;
            ImageView img_01;
            ImageView img_02;
            ImageView img_03;
        }

    class  ViewHolderTwo{
        TextView texttwo_title;
        ImageView imgtwo_01;

    }



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值