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

来源:互联网 发布:把mysql的表放到redis 编辑:程序博客网 时间:2024/05/22 04:28

在重写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
原创粉丝点击