在安卓中,listview  的item 是一个不断被轮询调换位置的过程,这样

即 图片参考地址   http://www.cnblogs.com/mybkn/archive/2012/05/23/2514681.html   谢谢。

开发中 ,我们经藏会遇到listview  的每一项都不同的需求。   这个时候如果使用 以前自定义的BaseAdapter的方法的话 。在滚动的时候就会出现item布局错乱的情况,也就是说 第一项在最初的背景是红色的xml布局, 当滚动到第二项置顶,在回到顶部的时候, 顶部的项布局可能就不是最初的样子了。

这种情况, 如果依然按照原先的方式的话,  当刚滑动至第一项消失,就会把第一项拿到底部。

但是如果实现下面方法 ,系统在你滑动de 时候就会判定,当前第一项消失的类型,并不是我要填充的类型就不会把他从第一行拿掉,去填充尾部,而是调用getview 告诉listview 要添加的项 view是空的 ,你去重新new个新的吧。

当返回顶部的时候,系统再次判断,即将显示的类型斌不是我底部的类型,就不会吧底部的项移到前面 ,而是复用刚刚的那个。

怎么才能解决这个问题呢

  我们需要做这些工作:

  1)重写 getViewTypeCount() – 该方法返回多少个不同的布局

  2)重写 getItemViewType(int) – 根据position返回相应的Item

  3)根据view item的类型,在getView中创建正确的convertView

    private RunRankAdapter runRankAdapter;
public ArrayList<View> listViews ;
public ViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Gson gson = new Gson(); ArrayList<String> runRank=new ArrayList<String>();
for(int i =;i<;i++)
{
runRank.add("dsdf");
} ListView lv_runRank; runRankAdapter = new RunRankAdapter(this, runRank);
lv_runRank = (ListView) findViewById(R.id.listView1);
lv_runRank.setAdapter(runRankAdapter);
class RunRankAdapter extends BaseAdapter {
ArrayList<String> 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<String> 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_one,
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_two,
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_3,
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 + 1));
// holder1.time1.setText(ls.get(position).get("time").toString());
// break;
// case TYPE_2:
// holder2.rank2.setText("" + (position + 1));
// holder2.time2.setText(ls.get(position).get("time").toString());
// holder2.totaldistance2.setText(ls.get(position)
// break;
// case TYPE_3:
// holder3.rank3.setText("" + (position + 1));
// 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;
}
}

适配器

安卓Listview 不规则项即不同item的运行的更多相关文章

  1. Android 高级UI设计笔记03:使用ListView实现左右滑动删除Item

    1. 这里就是实现一个很简单的功能,使用ListView实现左右滑动删除Item: (1)当我们在ListView的某个Item,向左滑动显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有 ...

  2. Android:控件ListView列表项与适配器结合使用

    Listview是用来展示一些重复性的数据用的,比如一些列表集合数据展示到手机,需要适配器作为载体获取数据,最后将数据填充到布局. ListView里面的每个子项Item可以使一个字符串,也可以是一个 ...

  3. listview当选中某一个item时设置背景色其他的不变

    listview当选中某一个item时设置背景色其他的不变: 可以使用listview.setOnFoucsChangeListener(listener) ; /** * listview获得焦点和 ...

  4. Android ListView 之 SimpleAdapter 二 (包含 item 中按钮监听)

    1    MainActivity.java package com.myadapter; import java.util.ArrayList; import java.util.HashMap; ...

  5. Android ListView根据项数的大小自动改变高度

    第一种:按照listview的项数确定高度 ListAdapter listAdapter = listView.getAdapter();      if (listAdapter == null) ...

  6. listview的pushBackDefaultItem中的item属性被修改问题

    time:2015/05/04 1. 描述 在cocostudio中有两个控件,一个listview,另外一个是隐藏的imageview,其中后者作为listview的元素.每次使用的时候把Image ...

  7. [转][Android] ListView中getView的原理+如何在ListView中放置多个item

      ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView). 一个新的视图被返回并显示 如果 ...

  8. System.ArgumentException: 已添加了具有相同键的项。(An item with the same key has already been added) 在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) 在 System.Web.Mvc.Js

    最近将一个项目从ASP.NET MVC 3升级至刚刚发布的ASP.NET MVC 5.1,升级后发现一个ajax请求出现了500错误,日志中记录的详细异常信息如下: System.ArgumentEx ...

  9. PyQt(Python+Qt)学习随笔:基于项的项部件(Item Widgets(Item-Based))概述

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 Model/View架构中的视图部件是基于模型的项视图(Item Views(Model-Based ...

随机推荐

  1. c/c++通用内存泄漏检测框架GMFD(General Memory Fault Detection Framework)

    http://qa.baidu.com/blog/?p=171 1 背景: x86平台有完善的用户态检测内存工具比如valgrind等,可以监控程序运行中详细的内存信息,从而精确定位内存问题.然而随着 ...

  2. Struts2 拦截器配置及使用

    在我的项目中有个需求,实现记录用户操作的系统日志,基于这个功能我首先想到的是Struts 的拦截器.配置一个全部Action都会拦截的拦截,写一个公用的服务.每当用户发送请求到Action 就记录相应 ...

  3. 实现虚拟机VMware上linux与windows互相复制与粘贴

    from:http://blog.csdn.net/u012243115/article/details/40454063 系统环境: win7系统,虚拟机VMwareWorkstation上运行的C ...

  4. web应用目录结构

    news web(应用的名字)||--静态资源和JSP文件都可以直接放在web应用的目录下,浏览器可以直接访问(html/jsp/css)|--WEB-INF 可以没有,但是最好有,一旦有,则结构需要 ...

  5. html格式

    优美的代码编写方式是我们装逼的基础,在python中我们称优秀的代码为pythonic,无独有偶,html.css.js也都有着自己相比更优美的写法~ <!DOCTYPE html> &l ...

  6. Linux查看CPU《型号..》《内存..》《硬盘..》《系统..》

    1.查看物理cpu个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 2.查看核心数量grep 'core id' /proc/cpuinfo ...

  7. Levko and Array

    题意: 有一长度为n的正整数序列,你可以选择K个数字任意改变它,使得$max \{ a(i+1) - a(i) \} $ 最小,求最小值. 解法: 1.$O(n^2log(MAX_A) )$,考虑二分 ...

  8. Asset Catalog Help (六)---Adding OS X Icons

    Adding OS X Icons Simplify image management by storing your OS X icons in an asset catalog. 把OS X图标存 ...

  9. UVa 242 Stamps and Envelope Size (无限背包,DP)

    题意:信封上最多贴S张邮票.有N个邮票集合,每个集合有不同的面值.问哪个集合的最大连续邮资最 大,输出最大连续邮资和集合元素. 最大连续邮资是用S张以内邮票面值凑1,2,3...到n+1凑不出来了,最 ...

  10. T^TOJ - 2360 - Home_W的超级数学题 - 莫比乌斯反演 - 质因数分解

    求单个莫比乌斯函数忘记算n本身的质数,WA了一发. http://www.fjutacm.com/Problem.jsp?pid=2360 首先,显然随着n增大,与m互质的数不会变少.可以二分来求k, ...