android开发-Listview中显示不同的视图布局

在重写ListView的BaseAdapter时,我们常常在getView()方法中复用convertView,以提高性能。convertViewItem为单一的同种类型布局时,能够回收并重用,但是多个Item布局类型不同时,convertView的回收和重用会出现问题。比如有些行为纯文本,有些行则是图文混排,这里纯文本行为一类布局,图文混排的行为第二类布局。单一类型的ListView很简单,下面着重介绍一下ListView包含多种类型视图布局的情形

2.ListView包含不同Item的布局


  1)重写 getViewTypeCount() – 该方法返回多少个不同的布局

  2)重写 getItemViewType(int) – 根据position返回相应的Item   切记返回值 从 0  开始 

package adapter;

import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.jht.administrator.relaxtime.R;
import com.jht.administrator.relaxtime.SelectActivityTwo;

import java.util.ArrayList;
import java.util.List;

import bean.SelectData;
import utils.BitmapUtils;

/**
 * Created by Administrator on 2016/10/9.
 */
public class SelectAdapter extends BaseAdapter {
    private Context context;
    private List<SelectData.RecommsBean> recommsBeanList1;
    private List<ImageView> imgs;
    private List<View> bannerList;
    private SelectPageAdapter pageAdapter;
    private ViewPager viewPager;
    private int a;
    private boolean flag = false;


    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);

            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
            sendEmptyMessageDelayed(1, 3000);

        }
    };


    public SelectAdapter(Context context, List<SelectData.RecommsBean> recommsBeanList) {
        this.context = context;
        this.recommsBeanList1 = recommsBeanList;
        Log.i("sss", recommsBeanList1.toString());
    }

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

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

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

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

    @Override
    public int getItemViewType(int position) {
        if (recommsBeanList1.get(position).getType().equals("Collection")) {
            //解析数据获得的type,根据不同的type判断需要多少不同的布局,视数据和布局而定
            return 0;
        } else
            return 1;
    }

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        final ViewHolder viewHolder;
        a = i;
        if (view == null) {//根据谷歌推荐,先判断view是否为空,在判断对应的item,根据不同的item,加载不同的布局
            if (getItemViewType(i) == 1) {
                viewHolder = new ViewHolder();
                view = LayoutInflater.from(context).inflate(R.layout.select_item, viewGroup, false);
                viewHolder.username = (TextView) view.findViewById(R.id.username);
                viewHolder.intro = (TextView) view.findViewById(R.id.intro);
                viewHolder.title = (TextView) view.findViewById(R.id.top_title);
                viewHolder.sub_title = (TextView) view.findViewById(R.id.sub_title);
                viewHolder.short_desc = (TextView) view.findViewById(R.id.short_desc);
                viewHolder.like_count = (TextView) view.findViewById(R.id.like_count);
                viewHolder.destination = (TextView) view.findViewById(R.id.destination);
                viewHolder.phonto_url = (ImageView) view.findViewById(R.id.phonto_url);
                viewHolder.bag_pic = (ImageView) view.findViewById(R.id.bag_pic);
                view.setTag(viewHolder);
            } else {//加载viewpager
                viewHolder = new ViewHolder();
                view = LayoutInflater.from(context).inflate(R.layout.select_vp, viewGroup, false);
                viewHolder.vp = (ViewPager) view.findViewById(R.id.vp);
                viewHolder.vp_title = (TextView) view.findViewById(R.id.vp_title);
                viewHolder.VP_sub_title = (TextView) view.findViewById(R.id.vp_sub_title);
                view.setTag(viewHolder);
            }

        } else {
            viewHolder = (ViewHolder) view.getTag();
        }
        if (getItemViewType(i) == 1) {
            viewHolder.username.setText(recommsBeanList1.get(i).getReferrer().getUsername());
            viewHolder.intro.setText(recommsBeanList1.get(i).getReferrer().getIntro());
            viewHolder.title.setText(recommsBeanList1.get(i).getTitle());
            viewHolder.sub_title.setText(recommsBeanList1.get(i).getSub_title());
            viewHolder.short_desc.setText(recommsBeanList1.get(i).getShort_desc());
            viewHolder.like_count.setText(recommsBeanList1.get(i).getLike_count());
            viewHolder.destination.setText(recommsBeanList1.get(i).getDestination());
            String phono_url = recommsBeanList1.get(i).getReferrer().getPhoto_url();
            String bg_url = recommsBeanList1.get(i).getBg_pic().get(0);
            viewHolder.phonto_url.setTag(phono_url);
            viewHolder.bag_pic.setTag(bg_url);
            BitmapUtils.loadImage(phono_url, viewHolder.phonto_url, context, 1);
            BitmapUtils.loadImage(bg_url, viewHolder.bag_pic, context, 1);
        } else if (getItemViewType(i) == 0) {

            //  imgs = new ArrayList<ImageView>();
            bannerList = new ArrayList<View>();

            for (int j = 0; j < recommsBeanList1.get(i).getCollections().size(); j++) {
                String imgpath = recommsBeanList1.get(i).getCollections().get(j).getBg_pic().get(0);
                String title = recommsBeanList1.get(i).getCollections().get(j).getTitle();
                String subtitle = recommsBeanList1.get(i).getCollections().get(j).getSub_title();

                View view1 = LayoutInflater.from(context).inflate(R.layout.item_banner_item, viewGroup, false);
                TextView tv = (TextView) view1.findViewById(R.id.id_item_banner_tv);
                TextView tv2 = (TextView) view1.findViewById(R.id.id_item_banner_tv2);
                ImageView iv = (ImageView) view1.findViewById(R.id.id_item_banner_iv);

                BitmapUtils.loadImage(imgpath, iv, context, 1);
                tv.setText(title);
                tv2.setText(subtitle);


                final int finalJ = j;

                view1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Log.i("tag", recommsBeanList1.get(i).getCollections().get(finalJ).getId() + "");
                        Intent intent = new Intent(context, SelectActivityTwo.class);
                        intent.putExtra("ID", recommsBeanList1.get(i).getCollections().get(finalJ).getId() + "");
                        intent.putExtra("SHORT_DESC", recommsBeanList1.get(i).getCollections().get(finalJ).getShort_desc());
                        intent.putExtra("TITLE", recommsBeanList1.get(i).getCollections().get(finalJ).getTitle());
                        intent.putExtra("BG_PIC", recommsBeanList1.get(i).getCollections().get(finalJ).getBg_pic().get(0));
                        context.startActivity(intent);

                    }
                });
                bannerList.add(view1);
            }
            pageAdapter = new SelectPageAdapter(context, bannerList, recommsBeanList1, i);
            viewHolder.vp.setAdapter(pageAdapter);

            viewPager = viewHolder.vp;
            if (flag == false) {
                handler.sendEmptyMessageDelayed(1, 3000);
                flag = true;
            }


        }


        return view;
    }


    public class ViewHolder {
        TextView username, intro, title, sub_title, short_desc, like_count, destination;
        ImageView phonto_url, bag_pic;
        TextView vp_title;
        TextView VP_sub_title;
        ViewPager vp;
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值