Android中使用listview出现数据紊乱

环境:android开发新闻类app,其中新闻列表使用到listView。当用户点击某一条新闻的时候,想更改新闻标题颜色标记为已读。但是当下拉的时候,会出现其余的条目也会... 环境:android开发新闻类app,其中新闻列表使用到listView。当用户点击某一条新闻的时候,想更改新闻标题颜色标记为已读。但是当下拉的时候,会出现其余的条目也会发生更改的现象。

代码:

@Override
public void onItemClick(AdapterView<?> adapter, View cellView, int position, long longPosition) {
Object data = adapter.getItemAtPosition(position);
if (data instanceof HashMap<?, ?>) {
HashMap<String, Object> map = (HashMap<String, Object>) data;
String link = (String) map.get("link");

if (link != null) {
Intent webIntent = new Intent();
webIntent.setAction("android.intent.action.VIEW");
Uri uri = Uri.parse(link);
webIntent.setData(uri);
startActivity(webIntent);

TextView titleView = (TextView) cellView.findViewById(R.id.menuTextView);

if (titleView != null) {// Mark this cell as readed
titleView.setTextColor(getResources().getColor(R.color.sub_title_color));
}
}
}
}
展开
 我来答
lmdy2001
2014-02-26 · TA获得超过592个赞
知道小有建树答主
回答量:491
采纳率:0%
帮助的人:159万
展开全部
ListView的Item child view个数是最多能显示的item数+2。
也就是说,假设你当前看到ListView的item数最多是9, 那这个ListView其实最多只有11个child view, 但ListView可能有几十几百个Item, 怎么办呢?
当你向下滑动的时候, 把第12个item滑出来的时候,事实上第1,2个item已经完全看不到了,所以第12个Item是重用第1个Item的view, 第13个item是重用的第2个Item的view,也就是ListAdapter.getView()中作为参数传入的convertView。
这样明白了吧, 针对第1个Item view,如果你给里面的控件设置了一些属性,那么当你滑动listview的时候,第12个item上也会是一样的item view。
So, 两种办法:
1) 在ListAdapter.getView()这个方法中, 每次都是重新创建一个view return。
2)在ListAdapter.getView()这个方法中,还是会重用convertView,但是每次都要重新去初始化convertView的属性。
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
尉坚6h
2014-02-26 · 超过10用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:15.3万
展开全部
这个应该是屏幕显示的问题
android中判断是一屏一屏的显示 你的代码就相当于每个屏幕的相对应位置都标记为已读
adpater创建的view的总高度,不会超出屏幕的高度,所以view的个数是固定的,当滑动加载后面的数据时,就会用划出屏幕的view来显示新的
数据,而此时,这个view已经设置了背景颜色,因此滑动之后新加载的数据,他的view也会有背景颜色,在设置背景颜色前,先要把原来的背景颜色清除
追问
我觉得你说的原因比较合理,就是android里面采用的缓存机制。使得新加载view的时候使用已经缓存的view。但是你说的这个方法貌似还是不能解决问题。
追答

我的太久啦 找不到你看看我给那

的地址 解决挺好的主要是第三条 百度太坑了

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
科技程序迷
2014-02-26 · TA获得超过2822个赞
知道大有可为答主
回答量:2240
采纳率:0%
帮助的人:1844万
展开全部

个人建议,可以通过数据模型来标记一个新闻是否已读的属性。

无论列表怎么变化,如何缓存,列表的适配器的getView方法,更新列表显示时,做新闻是否已读的颜色处理便可。


比如数据模型:

public class NewsItem {
    public String title; // 新闻标题
    public String text; // 新闻内容
    public String iconUrl; // 略缩图URL地址
    public boolean visited = false; // 是否已读
}

配置个BaseAdapter,关联到ListView。剩下的工作,OnItemClick做下工作。


ListView的ItemView是复用的,你一直都更新控件的颜色就是了。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
缑向镜浩初
2019-11-07 · TA获得超过1148个赞
知道小有建树答主
回答量:1761
采纳率:100%
帮助的人:8.4万
展开全部
饿。。
我没明白你的意思。
android.app.activity这个类是不能直接设置adapter的,
如果你想在一个activity中直接设置adapter,
可以用listactivity.
这个类是activity的子类,
所以activity有的功能它都有,并接它还有listview的功能,
你可以在这个activity中直接通过this.setlistadapter(adapter);方法来为这个activity设置adapter。
另外,虚机团上产品团购,超级便宜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
591304836
2014-02-26 · TA获得超过403个赞
知道小有建树答主
回答量:321
采纳率:0%
帮助的人:171万
展开全部
数据的填充和布局,都是在Adapter中进行的,如果你要修改某一项,请直接修改Adapter,之后用notifyDataSetChanged()方法来更新。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式