Android ListView中 每一项都有不同的布局
实现代码
Adapter的代码
其中:ViewHolder分别是三个不同的布局,也就是ListView中每一项的布局
TYPE_1...是三种类型.
在使用不同布局的时候,getItemViewType和getViewType不能少,一般是不用这两个函数的重载的
class RunRankAdapter extends BaseAdapter {
ArrayList<HashMap<String, Object>> ls;
Context mContext;
LinearLayout linearLayout = null;
LayoutInflater inflater;
TextView tex;
final int VIEW_TYPE = ;
final int TYPE_1 = ;
final int TYPE_2 = ;
final int TYPE_3 = ;
public RunRankAdapter(Context context,
ArrayList<HashMap<String, Object>> list) {
ls = list;
mContext = context;
}
@Override
public int getCount() {
return ls.size();
}
@Override
public Object getItem(int position) {
return ls.get(position);
}
@Override
public long getItemId(int position) {
return ;
}
// 每个convert view都会调用此方法,获得当前所需要的view样式
@Override
public int getItemViewType(int position) {
int p = position;
if (p == )
return TYPE_1;
else if (p == )
return TYPE_2;
else
return TYPE_3;
}
@Override
public int getViewTypeCount() {
return ;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder1 holder1 = null;
ViewHolder2 holder2 = null;
ViewHolder3 holder3 = null;
int type = getItemViewType(position);
if (convertView == null) {
inflater = LayoutInflater.from(mContext);
// 按当前所需的样式,确定new的布局
switch (type) {
case TYPE_1:
convertView = inflater.inflate(R.layout.item_runrank1,
parent, false);
holder1 = new ViewHolder1();
holder1.rank1 = (TextView) convertView
.findViewById(R.id.tv_list1_rank);
holder1.time1 = (TextView) convertView
.findViewById(R.id.tv_list1_time);
convertView.setTag(holder1);
break;
case TYPE_2:
convertView = inflater.inflate(R.layout.item_runrank2,
parent, false);
holder2 = new ViewHolder2();
holder2.rank2 = (TextView) convertView
.findViewById(R.id.tv_list2_rank);
holder2.time2 = (TextView) convertView
.findViewById(R.id.tv_list2_time);
convertView.setTag(holder2);
break;
case TYPE_3:
convertView = inflater.inflate(R.layout.item_runrank3,
parent, false);
holder3 = new ViewHolder3();
holder3.rank3 = (TextView) convertView
.findViewById(R.id.tv_list3_rank);
holder3.time3 = (TextView) convertView
.findViewById(R.id.tv_list3_time);
convertView.setTag(holder3);
break;
default:
break;
}
} else {
switch (type) {
case TYPE_1:
holder1 = (ViewHolder1) convertView.getTag();
break;
case TYPE_2:
holder2 = (ViewHolder2) convertView.getTag();
break;
case TYPE_3:
holder3 = (ViewHolder3) convertView.getTag();
break;
}
}
// 设置资源
switch (type) {
case TYPE_1:
holder1.rank1.setText("" + (position + ));
holder1.time1.setText(ls.get(position).get("time").toString());
break;
case TYPE_2:
holder2.rank2.setText("" + (position + ));
holder2.time2.setText(ls.get(position).get("time").toString());
holder2.totaldistance2.setText(ls.get(position)
break;
case TYPE_3:
holder3.rank3.setText("" + (position + ));
holder3.time3.setText(ls.get(position).get("time").toString());
break;
}
return convertView;
}
public class ViewHolder1 {
TextView rank1;
TextView time1;
}
public class ViewHolder2 {
TextView rank2;
TextView time2;
}
public class ViewHolder3 {
TextView rank3;
TextView time3;
}
}
使用方式:
声明并定义自己的Adapter,在ListView中设置他的Adapter
private RunRankAdapter runRankAdapter;
ArrayList<HashMap<String, Object>> runRank;
ListView lv_runRank;
runRank = new ArrayList<HashMap<String, Object>>();
runRankAdapter = new RunRankAdapter(this, runRank);
lv_runRank = (ListView) findViewById(R.id.lv_runRank);
lv_runRank.setAdapter(runRankAdapter);
Android ListView中 每一项都有不同的布局的更多相关文章
- android listview中item通过viewpager实现《IT蓝豹》
android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项 ...
- 继续聊WPF——如何获取ListView中选中的项
在WPF中获Listview中选中的项,与WinForm里面有着很大的区别,要亲身去研究一下在WPF中如果处理,其实也不难,来,下面我们一起来通过一个简单的示例来感悟一下吧. 第一步就是建立一个WPF ...
- android ListView中button点击事件盖掉onItemClick解决办法
ListView 1.在android应用当中,很多时候都要用到listView,但如果ListView当中添加Button后,ListView 自己的 public void onItemClick ...
- Android Listview中Button按钮点击事件冲突解决办法
今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...
- Android,LIstView中的OnItemClick点击无效的解决办法
在List_Item布局文件中的根节点加上如下背景标黄的这一行 <?xml version="1.0" encoding="utf-8"?> < ...
- [Android] ListView中如何让onClick和onItemClick事件共存
ListView中如何使用Button,让onClick和onItemClick事件共存 假如ListView的一条记录包含一个TextView文本框,一个Button按钮,怎样能让点击按钮有事件响应 ...
- Android ListView 中的checkbox
Q:ListView + CheckBox 当上下滚动的时候有事会自动选中或取消 A:这个与ListView的缓存机制有关.当你屏幕滚动后,ListView中的item选项视图先检查缓存中是否有视图, ...
- Android ListView中Item点击事件失效解决方案
欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布 ...
- android ListView中CheckBox错位的解决
貌似已经非常晚了,可是还是想记下笔记,想让今天完满. 在ListView中加了checkBox,但是发现点击改变其选中状态的时候,发现其位置错乱.状态改变的并非你选中的,百思不得其解.后面通过上网查资 ...
随机推荐
- magento 常用的函数
1.Magento eav_attribute表中source如何指定自定义数据来源 如果你引用的类名为yebihai_usermanage_model_entity_school你必须完整的给出地 ...
- Dapper.NET - ORM(ibatis.Net)
Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1 一对一映射 3.2 一对多映射 3.3 ...
- jenkins(二)项目构建
通过上一篇“jenkins(一)集成环境搭建示例”,已经完成了jenkins的安装,基本配置,启动,下面继续小结jenkins使用 一.jenkins系统配置 访问jenkins,点击系统管理-> ...
- 10.14_魅族手机音乐播放无故暂停,MetroUICss-tile中的字如何居中
(1)魅族手机,播放音乐,无故暂停.不管是自带的音乐播放程序,还是下载的其他音乐播放器都是如此.而且,手机上有个Google服务耗电量非常高,会经常弹出登陆Google账号的弹出项. (2)Metro ...
- (转)iOS中3种正则表达式的使用与比较
.利用NSPredicate(谓词)匹配 例如匹配有效邮箱: NSString *email = @“nijino_saki@.com”: NSString *regex = @"[A-Z0 ...
- jQuery siblings()用法与实例。
jQuery 的遍历方法siblings() $("给定元素").siblings(".selected") 其作用是筛选给定的同胞同类元素(不包括给定元素本身 ...
- jQuery学习 day01
最近受某大牛指点(我不会说他姓范),了解了一下jQuery,据说很牛X,就了解了一下,第一天,分享给大家一些心得吧. 1.首先就是导入jQuery文件了,这里我是去jQuery官网下载的.(大家可以去 ...
- Html代码Font-Size中px与pt的区别
一个是设备坐标,一个是逻辑坐标,两者是不同的. px是个相对单位,一般像素的参考值为:在一个像素密度是90 pdi的显示器上,正常人从距离显示器28英寸处看一个像素的视角应该不小于0.0227度. 1 ...
- 『奇葩问题集锦』function * (next){ 执行报错 SyntaxError: Unexpected token *
这是因为 app.use(function * (){ 语句中有一个 * ,这种方式被称为generator functions ,一般写作function *(){...} 的形式,在此类func ...
- [转载] PowerMokito 使用
一.为什么要使用Mock工具 在做单元测试的时候,我们会发现我们要测试的方法会引用很多外部依赖的对象,比如:(发送邮件,网络通讯,远程服务, 文件系统等等). 而我们没法控制这些外部依赖的对象,为了解 ...