Android(安卓)ListView中 每一项都有不同的布局
16lz
2021-01-26
实现代码
Adapter的代码
其中:ViewHolder分别是三个不同的布局,也就是ListView中每一项的布局
TYPE_1...是三种类型.
在使用不同布局的时候,getItemViewType和getViewType不能少,一般是不用这两个函数的重载的
[java] view plain copy- classRunRankAdapterextendsBaseAdapter{
- ArrayList<HashMap<String,Object>>ls;
- ContextmContext;
- LinearLayoutlinearLayout=null;
- LayoutInflaterinflater;
- TextViewtex;
- finalintVIEW_TYPE=3;
- finalintTYPE_1=0;
- finalintTYPE_2=1;
- finalintTYPE_3=2;
- publicRunRankAdapter(Contextcontext,
- ArrayList<HashMap<String,Object>>list){
- ls=list;
- mContext=context;
- }
- @Override
- publicintgetCount(){
- returnls.size();
- }
- @Override
- publicObjectgetItem(intposition){
- returnls.get(position);
- }
- @Override
- publiclonggetItemId(intposition){
- return0;
- }
- //每个convertview都会调用此方法,获得当前所需要的view样式
- @Override
- publicintgetItemViewType(intposition){
- intp=position;
- if(p==0)
- returnTYPE_1;
- elseif(p==1)
- returnTYPE_2;
- else
- returnTYPE_3;
- }
- @Override
- publicintgetViewTypeCount(){
- return3;
- }
- @Override
- publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
- ViewHolder1holder1=null;
- ViewHolder2holder2=null;
- ViewHolder3holder3=null;
- inttype=getItemViewType(position);
- if(convertView==null){
- inflater=LayoutInflater.from(mContext);
- //按当前所需的样式,确定new的布局
- switch(type){
- caseTYPE_1:
- convertView=inflater.inflate(R.layout.item_runrank1,
- parent,false);
- holder1=newViewHolder1();
- holder1.rank1=(TextView)convertView
- .findViewById(R.id.tv_list1_rank);
- holder1.time1=(TextView)convertView
- .findViewById(R.id.tv_list1_time);
- convertView.setTag(holder1);
- break;
- caseTYPE_2:
- convertView=inflater.inflate(R.layout.item_runrank2,
- parent,false);
- holder2=newViewHolder2();
- holder2.rank2=(TextView)convertView
- .findViewById(R.id.tv_list2_rank);
- holder2.time2=(TextView)convertView
- .findViewById(R.id.tv_list2_time);
- convertView.setTag(holder2);
- break;
- caseTYPE_3:
- convertView=inflater.inflate(R.layout.item_runrank3,
- parent,false);
- holder3=newViewHolder3();
- 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){
- caseTYPE_1:
- holder1=(ViewHolder1)convertView.getTag();
- break;
- caseTYPE_2:
- holder2=(ViewHolder2)convertView.getTag();
- break;
- caseTYPE_3:
- holder3=(ViewHolder3)convertView.getTag();
- break;
- }
- }
- //设置资源
- switch(type){
- caseTYPE_1:
- holder1.rank1.setText(""+(position+1));
- holder1.time1.setText(ls.get(position).get("time").toString());
- break;
- caseTYPE_2:
- holder2.rank2.setText(""+(position+1));
- holder2.time2.setText(ls.get(position).get("time").toString());
- holder2.totaldistance2.setText(ls.get(position)
- break;
- caseTYPE_3:
- holder3.rank3.setText(""+(position+1));
- holder3.time3.setText(ls.get(position).get("time").toString());
- break;
- }
- returnconvertView;
- }
- publicclassViewHolder1{
- TextViewrank1;
- TextViewtime1;
- }
- publicclassViewHolder2{
- TextViewrank2;
- TextViewtime2;
- }
- publicclassViewHolder3{
- TextViewrank3;
- TextViewtime3;
- }
- }
使用方式:
声明并定义自己的Adapter,在ListView中设置他的Adapter
[java] view plain copy- privateRunRankAdapterrunRankAdapter;
- ArrayList<HashMap<String,Object>>runRank;
- ListViewlv_runRank;
- runRank=newArrayList<HashMap<String,Object>>();
- runRankAdapter=newRunRankAdapter(this,runRank);
- lv_runRank=(ListView)findViewById(R.id.lv_runRank);
- lv_runRank.setAdapter(runRankAdapter);
还有一种方法:
在主布局文件中包含一个LinearLayout. 并且设置android:orientation="vertical"
定义两种不同的布局文件,然后代码中,根据不同条件调用.addview向LinearLayout加载就可以了
转自http://blog.csdn.net/lllkey/article/details/9093107
更多相关文章
- android百度地图开发总结
- Android使用Canvas绘制圆形进度条效果
- android 世界各国英文简写代码 资源文件
- jQuery Mobile 入门教程
- 主题:Android(安卓)皮肤apk实现换肤
- Android(安卓)MVVM模式入门
- 常用布局之相对布局
- ButterKnife代码生成的插件
- [教程] Android修改源代码控制永不锁屏
随机推荐
- android抽屉SlidingDrawer——错误显示
- android实现文本复制到剪切板功能(Clipbo
- Android(安卓)开发手顺2--- “An SDK Tar
- android 格林尼治标准时间的 格式转换 (S
- 安装android-ndk-1.5_r1遇到的问题及解决
- java-universal-tween-engine
- UBUNTU搭建android SDK开发环境
- Android开发工具之Android(安卓)Studio--
- Android(安卓)Material Design Library系
- Android(安卓)onItemLongClick+onCreateCo