listview里面的item的多种view模式(多种类型的item)

来源:互联网 发布:剑三霸刀捏脸数据 编辑:程序博客网 时间:2024/06/07 05:03

如果只是简单的实现单一的item,就只要重写下面的四个方法:

int getCount():返回数据源中数据项的总数量
        
        Object getItem(int position):根据position从数据源中获取数据项
        
        long getItemId(int position): 根据position从数据源中获取数据项ID
        
        View getView(int position, View convertView, ViewGroup parent):根据position创建View,它是Adapter中最重要的方法,listView通过它创建View。

如若要实现不同类型的item就需要再重写以下两种的方法:

   int getViewTypeCount():返回item使用的View模式的总数量。
        
        int getItemViewType(int position):根据position获取对应item使用的View模式。

adapter重点代码:

//表示我有多少个item的类型    private static final int ITEMCODE_VIDEO = 0;    private static final int ITEMCODE_GATHER = 1;    private static final int ITEMCODE_TEXT_FOOT = 2;    private static final int ITEMCODE_TEXT_HEADER = 3;    private static final int ITEMCODE_FOLLOW = 4;

//按类型返回        switch (type) {            case ITEMCODE_VIDEO://视频项                final VideoHolder videoHolder;                if (convertView == null) {                    videoHolder = new VideoHolder();                    convertView = mInflater.inflate(R.layout.item_home, parent, false);                    ButterKnife.bind(videoHolder, convertView);                    convertView.setTag(videoHolder);                } else {                    videoHolder = (VideoHolder) convertView.getTag();                }                videoHolder.mTvHomeBottom.setText(DateFormatUtil.getDetail(dataBean));//设置类型和时间                videoHolder.mTvHomeTitle.getPaint().setFakeBoldText(true);//加粗                videoHolder.mTvHomeTitle.setText(dataBean.getTitle());//设置标题                if (mDatas.get(position).getType().equals("video")) {                    Picasso.with(EyesApplication.getContext())                            .load(dataBean.getCover().getDetail())                            .resize(SizeUtils.dp2px(mContext, 500), SizeUtils.dp2px(mContext, 250))                            .centerCrop()                            .config(Bitmap.Config.RGB_565).into(videoHolder.mIvHomeContent);                }                //点击事件                videoHolder.mGroupHomeVideo.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        //跳转到视频页面                        Intent intent = new Intent(mContext, SelsetedActivity.class);                        intent.putExtra(SelsetedActivity.DATA, dataBean);                        //动画                        if (android.os.Build.VERSION.SDK_INT > 20) {                            mContext.startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(mContext, videoHolder.mIvHomeContent, "transitionImg").toBundle());                        } else {                            mContext.startActivity(intent);                        }                    }                });                return convertView;case ITEMCODE_VIDEO://视频项case...}


//通过这个方法选取使用那个item的类型    @Override    public int getItemViewType(int position) {        String type = mDatas.get(position).getType();        Log.v("message", "类型:" + type + mDatas.get(position).getData().getTitle());        if ("videoCollectionOfFollow".equals(type)) {            return ITEMCODE_FOLLOW;        } else if ("videoCollectionWithCover".equals(type)) {            return ITEMCODE_GATHER;//集合项        } else if ("textHeader".equals(type)) {            return ITEMCODE_TEXT_HEADER;        } else if ("textFooter".equals(type)) {            return ITEMCODE_TEXT_FOOT;//文字项        }        return ITEMCODE_VIDEO;//视频项    }

//返回你有多少个item的类型    @Override    public int getViewTypeCount() {        return 5;    }


adapter所有代码:

public class HomeBaseAdapter extends BaseAdapter {//表示我有多少个item的类型    private static final int ITEMCODE_VIDEO = 0;    private static final int ITEMCODE_GATHER = 1;    private static final int ITEMCODE_TEXT_FOOT = 2;    private static final int ITEMCODE_TEXT_HEADER = 3;    private static final int ITEMCODE_FOLLOW = 4;    private List<ItemListBean> mDatas;//数据的集合    private final Activity mContext;//连接上下文的Context    private final LayoutInflater mInflater;    public HomeBaseAdapter(Activity context) {        mContext = context;        mInflater = LayoutInflater.from(mContext);    }    public void setData(List<ItemListBean> datas) {        mDatas = datas;    }    @Override    public int getCount() {        return mDatas != null ? mDatas.size() : 0;    }    @Override    public Object getItem(int position) {        return mDatas.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        int type = getItemViewType(position);        final DataBean dataBean = mDatas.get(position).getData();        //按类型返回        switch (type) {            case ITEMCODE_VIDEO://视频项                final VideoHolder videoHolder;                if (convertView == null) {                    videoHolder = new VideoHolder();                    convertView = mInflater.inflate(R.layout.item_home, parent, false);                    ButterKnife.bind(videoHolder, convertView);                    convertView.setTag(videoHolder);                } else {                    videoHolder = (VideoHolder) convertView.getTag();                }                videoHolder.mTvHomeBottom.setText(DateFormatUtil.getDetail(dataBean));//设置类型和时间                videoHolder.mTvHomeTitle.getPaint().setFakeBoldText(true);//加粗                videoHolder.mTvHomeTitle.setText(dataBean.getTitle());//设置标题                if (mDatas.get(position).getType().equals("video")) {                    Picasso.with(EyesApplication.getContext())                            .load(dataBean.getCover().getDetail())                            .resize(SizeUtils.dp2px(mContext, 500), SizeUtils.dp2px(mContext, 250))                            .centerCrop()                            .config(Bitmap.Config.RGB_565).into(videoHolder.mIvHomeContent);                }                //点击事件                videoHolder.mGroupHomeVideo.setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        //跳转到视频页面                        Intent intent = new Intent(mContext, SelsetedActivity.class);                        intent.putExtra(SelsetedActivity.DATA, dataBean);                        //动画                        if (android.os.Build.VERSION.SDK_INT > 20) {                            mContext.startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(mContext, videoHolder.mIvHomeContent, "transitionImg").toBundle());                        } else {                            mContext.startActivity(intent);                        }                    }                });                return convertView;            case ITEMCODE_GATHER://集合类型                GatherHolder gatherHolder;                if (convertView == null) {                    gatherHolder = new GatherHolder();                    convertView = mInflater.inflate(R.layout.item_home_gether, parent, false);                    ButterKnife.bind(gatherHolder, convertView);                    convertView.setTag(gatherHolder);                } else {                    gatherHolder = (GatherHolder) convertView.getTag();                }                HomeHeader header = dataBean.getHeader();                Picasso.with(mContext).load(header.getCover())                        .config(Bitmap.Config.RGB_565).into(gatherHolder.mIvHomeGatherHeader);                //设置recyclerview                gatherHolder.mRvHomeGatherContent.setLayoutManager(new GridLayoutManager(mContext, 1, LinearLayoutManager.HORIZONTAL, false));                HomeRvadapter rvadapter = new HomeRvadapter(mContext, dataBean);                gatherHolder.mRvHomeGatherContent.setAdapter(rvadapter);                return convertView;            case ITEMCODE_FOLLOW://热门推荐                FollwHolder follwHolder;                if (convertView == null) {                    follwHolder = new FollwHolder();                    convertView = mInflater.inflate(R.layout.item_home_follw, parent, false);                    ButterKnife.bind(follwHolder, convertView);                    convertView.setTag(follwHolder);                } else {                    follwHolder = (FollwHolder) convertView.getTag();                }                HomeHeader floowHeader = dataBean.getHeader();                follwHolder.mTvFollwTitle.getPaint().setFakeBoldText(true);                follwHolder.mTvFollwTitle.setText(floowHeader.getTitle());                follwHolder.mTvFollwDetail.setText(floowHeader.getDescription());                //设置recyclerview                follwHolder.mRvHomeFollwContent.setLayoutManager(new GridLayoutManager(mContext, 1, LinearLayoutManager.HORIZONTAL, false));                HomeRvadapter floowAdapter = new HomeRvadapter(mContext, dataBean);                follwHolder.mRvHomeFollwContent.setAdapter(floowAdapter);                return convertView;            case ITEMCODE_TEXT_FOOT://底部文字类型                convertView = mInflater.inflate(R.layout.item_home_foottext, parent, false);                TextView footTv = (TextView) convertView.findViewById(R.id.tv_home_foottext);                //设置数据                String footText = dataBean.getText();                if (!TextUtils.isEmpty(footText)) {                    footTv.setText(footText);                }                return convertView;            case ITEMCODE_TEXT_HEADER://顶部文字类型                convertView = mInflater.inflate(R.layout.item_home_heandertext, parent, false);                TextView headerTv = (TextView) convertView.findViewById(R.id.tv_home_handertext);                //添加自定义字体及字体加粗                Typeface face = Typeface.createFromAsset (EyesApplication.getContext().getAssets(),"fonts/timesi.ttf");                headerTv.setTypeface(face);                TextPaint tp = headerTv.getPaint();                tp.setFakeBoldText(true);                //设置数据                String handText = dataBean.getText();                if (!TextUtils.isEmpty(handText)) {                    Spanned fromHtml = Html.fromHtml("<font color='black' font='" + dataBean.getFont() + "' size='24'>" + dataBean.getText() + "</font>");                    headerTv.setText(fromHtml);                }                return convertView;        }        return null;    }//通过这个方法选取使用那个item的类型    @Override    public int getItemViewType(int position) {        String type = mDatas.get(position).getType();        Log.v("message", "类型:" + type + mDatas.get(position).getData().getTitle());        if ("videoCollectionOfFollow".equals(type)) {            return ITEMCODE_FOLLOW;        } else if ("videoCollectionWithCover".equals(type)) {            return ITEMCODE_GATHER;//集合项        } else if ("textHeader".equals(type)) {            return ITEMCODE_TEXT_HEADER;        } else if ("textFooter".equals(type)) {            return ITEMCODE_TEXT_FOOT;//文字项        }        return ITEMCODE_VIDEO;//视频项    }//返回你有多少个item的类型    @Override    public int getViewTypeCount() {        return 5;    }    public static class VideoHolder {//这里的我是使用黄油刀获取的holder,你们可以使用findViewById        @Bind(R.id.group_home_video)        RelativeLayout mGroupHomeVideo;        @Bind(R.id.iv_home_content)        ImageView mIvHomeContent;        @Bind(R.id.tv_home_title)        TextView mTvHomeTitle;        @Bind(R.id.tv_home_bottom)        TextView mTvHomeBottom;    }    public static class GatherHolder {        @Bind(R.id.iv_home_gather_header)        ImageView mIvHomeGatherHeader;        @Bind(R.id.rv_home_gather_content)        RecyclerView mRvHomeGatherContent;    }    public static class FollwHolder {        @Bind(R.id.tv_follw_title)        TextView mTvFollwTitle;        @Bind(R.id.tv_follw_detail)        TextView mTvFollwDetail;        @Bind(R.id.rv_home_follw_content)        RecyclerView mRvHomeFollwContent;    }}






原创粉丝点击