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; }}
阅读全文
0 0
- listview里面的item的多种view模式(多种类型的item)
- ListView有多种Item View的优化
- ListView有多种Item View的优化
- ListView 多种Item的加载
- [android ui]ListView有多种Item View的优化
- Android之ListView包含多种类型的Item
- 关于listview加载多种item的解决方案
- ListView 加载多种不同的item
- Android--listview多种类型item
- android listView的item 显示多种不同的布局
- 自定义Adapter实现多种Item视图的ListView
- 自定义Adapter实现多种Item视图的ListView
- Android—自定义Adapter实现多种Item视图的ListView
- android中如何让listview的item是多种布局
- 自定义Adapter实现多种Item视图的ListView
- [DEVDIV原创] 自定义Adapter实现多种Item视图的ListView
- Android listView同时展示多种不同数据的item
- Android listview 包含你多种item布局的情况
- 模型的dump与load
- adb devices存在偶现的no permission或者????问题
- 118. Pascal's Triangle
- 微信小程序开发-校园网小程序开发步骤
- 使用Java实现Excel导入功能
- listview里面的item的多种view模式(多种类型的item)
- 深度学习Matlab工具箱代码注释——cnnsetup.m
- 分词器anjs工具类KeyWordComputer中learnTool报错
- 低功耗蓝牙cc2541学习笔记之协议栈简介
- 牛客5(京东)
- 【补题】2017山东省赛A题 Return of the Nim
- Spring MVC 入门示例讲解
- 欢迎使用CSDN-markdown编辑器
- 仿微信图片浏览转场、酷狗转场