安卓Listview 不规则项即不同item的运行
在安卓中,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的运行的更多相关文章
- Android 高级UI设计笔记03:使用ListView实现左右滑动删除Item
1. 这里就是实现一个很简单的功能,使用ListView实现左右滑动删除Item: (1)当我们在ListView的某个Item,向左滑动显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有 ...
- Android:控件ListView列表项与适配器结合使用
Listview是用来展示一些重复性的数据用的,比如一些列表集合数据展示到手机,需要适配器作为载体获取数据,最后将数据填充到布局. ListView里面的每个子项Item可以使一个字符串,也可以是一个 ...
- listview当选中某一个item时设置背景色其他的不变
listview当选中某一个item时设置背景色其他的不变: 可以使用listview.setOnFoucsChangeListener(listener) ; /** * listview获得焦点和 ...
- Android ListView 之 SimpleAdapter 二 (包含 item 中按钮监听)
1 MainActivity.java package com.myadapter; import java.util.ArrayList; import java.util.HashMap; ...
- Android ListView根据项数的大小自动改变高度
第一种:按照listview的项数确定高度 ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) ...
- listview的pushBackDefaultItem中的item属性被修改问题
time:2015/05/04 1. 描述 在cocostudio中有两个控件,一个listview,另外一个是隐藏的imageview,其中后者作为listview的元素.每次使用的时候把Image ...
- [转][Android] ListView中getView的原理+如何在ListView中放置多个item
ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView). 一个新的视图被返回并显示 如果 ...
- 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 ...
- PyQt(Python+Qt)学习随笔:基于项的项部件(Item Widgets(Item-Based))概述
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 Model/View架构中的视图部件是基于模型的项视图(Item Views(Model-Based ...
随机推荐
- 通用方法解决UITextFiled输入的时候,键盘遮挡问题
我们在用键盘录入的时候,有可能会遮挡录入框,所以我们应调整UIView的位置,使其不被遮挡.我写了一个通用的方法可以解决这个问题:1. [代码][C/C++]代码 - (void) ...
- gzhu 2013 Good Sequence 解题报告
题目链接:(这个是内网的网址) http://172.22.27.1/problem?pid=1013 Good Sequence Time Limit: 4000/2000 MS (Java/Ot ...
- XAMPP的端口被占用
打开xampp\apache\conf\httpd.conf文件把80端口修改为:8081;打开xampp\apache\conf\extre\httpd-ssl.conf文件把443修改为4433或 ...
- 洛谷 1082 同余方程——exgcd(水题)
题目:https://www.luogu.org/problemnew/show/P1082 大水题. #include<iostream> #include<cstdio> ...
- 【Boost】boost库asio详解2——io_service::run函数无任务时退出的问题
io_service::work类可以使io_service::run函数在没有任务的时候仍然不返回,直至work对象被销毁. void test_asio_nowork() { boost::asi ...
- fragment error
error: android.view.InflateException: Binary XML file line #6: Error inflating class fragment 解决办法 ...
- javascript闭包和闭包的几种写法和用法
什么是闭包 闭包,官方的解释是:一个拥有需要许多变量和绑定了这=这些变量的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1 作为一个函数变量的引用,当函数返回时,其处于激活 ...
- hibernate学习四 hibernate关联关系映射
在Hibernate中对象之间的关联关系表现为数据库中表于表之间的关系(表之间通过外键关联). 1 单向的一对一 主键关联 外键关联 2 单向的一对多 3 单向的多对一 4 单向的多对多 5 双向的 ...
- 【旧文章搬运】Win7 OBJECT_HEADER之TypeIndex解析
原文发表于百度空间,2010-08-09========================================================================== 在Wind ...
- 三、mysql登录详解及版本号查询
1.用window+r,输入cmd,用mysql -uuser -ppassword登录时出现‘mysql’不是有效的内部命令? 答:这是因为没有配置MySQL的环境变量path所致. MySQL的环 ...