Android ListView失去焦点后之前选中的项无法突出显示

wengshh 2011-04-28 03:44:45
遇到一个难题了,请教大家了.预祝大家五一快乐~

ListView有焦点时:选中的项会高亮显示
但是失去焦点时,ListView中所有的项都成一样的,怎么可以让之前选中的项与其他的项有不同的显示(高亮或者改变字体都行).

再次谢谢各位好心人啊

附上有误的代码:

rightList.setOnFocusChangeListener(new AdapterView.OnFocusChangeListener() {

@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
//将第一个列表中被选中项高亮红色显示
if(!hasFocus&&(AdapterView)v==rightList)
{
//dCurrentColorModeIndex为之前已经选中项的位置,记录下来
/*
for(int i=0;i<((ListView)v).getCount();i++){
View vi=rightList.getChildAt(i);
if (dCurrentColorModeIndex == i) {
vi.setBackgroundColor(Color.RED);}
else { vi.setBackgroundColor(Color.TRANSPARENT);
}


}*/
}


}

});

...全文
1786 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gy197666 2012-07-24
  • 打赏
  • 举报
回复
设HideSelection为false
爱你爱我 2011-10-15
  • 打赏
  • 举报
回复
版主的问题可结局了?jiaohaili2008@163.com,期待中……
爱你爱我 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huibin147852369 的回复:]
这个要结合自己写的适配器,我不太清楚你适配器是怎么写的,具体的很简单,你首先定义一个全局的 int positionSelect=0(默认第一行被选中);在适配器中的getView(int position, View convertView, ViewGroup parent)中判断if(positionSelect==position){
convertView.setBackgroundD……
[/Quote]
我试了,可是还是刷新不了!总是点几个,选中了几个,求解!
ecode_陈 2011-09-15
  • 打赏
  • 举报
回复
求解,遇到同样为题了!
wengshh 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 edward_hc 的回复:]
LZ,解决木有?
[/Quote]这个我也没试,应该可以吧
Edward_hc 2011-06-22
  • 打赏
  • 举报
回复
LZ,解决木有?
惠(xi)斌 2011-05-09
  • 打赏
  • 举报
回复
这个要结合自己写的适配器,我不太清楚你适配器是怎么写的,具体的很简单,你首先定义一个全局的 int positionSelect=0(默认第一行被选中);在适配器中的getView(int position, View convertView, ViewGroup parent)中判断if(positionSelect==position){
convertView.setBackgroundDrawable(R.color.city_color);
}else{
convertView.setBackgroundDrawable(R.color.uncity_color);
}
在list.setOnItemClickListener()中有参数position(即就是arg2),将position传到适配器中,再调用adtapter.notifyDataSetChanged(),方法即可,很easy!
jsj05514 2011-04-28
  • 打赏
  • 举报
回复
能不能生命一个全局的View,每次把当前选中的View赋值给他。
当焦点发生改变以后,在去拿这个全局View,对他进行一些操作啊。
具体没做过这样的功能,只是个人的想法。希望对你有用。
wengshh 2011-04-28
  • 打赏
  • 举报
回复

/* 为m_ListView视图添加setOnItemClickListener监听 */
rightList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
for(int i=0;i<arg0.getCount();i++){
View v=arg0.getChildAt(i);
if (arg2 == i) {
v.setBackgroundColor(Color.RED);
}
else {
v.setBackgroundColor(Color.TRANSPARENT);}
}
}


这样做,当点击ListView时是可以成功设置选中项其背景为红色,但是失去焦点时如果按照上面给出的代码
View vi=rightList.getChildAt(pos); 则程序崩溃了....
I_am_studying 2011-04-28
  • 打赏
  • 举报
回复
View vi=rightList.getChildAt(pos); listView是一个ViewGroup所以应该得到的是你点击的那一列的view,是获取不到这个vi吗?
linlouyijian 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wengshh 的回复:]

引用 1 楼 i_am_studying 的回复:
给你个思路,你试试可以不,定义一个全局变量int pos,对每次点击List做一个监听,得到一个int position赋值给全局变量,这样在用 View vi=rightList.getChildAt(pos); vi.setBackgroundColor(Color.RED);
这样应该可以了吧

dCurrentColorMode……
[/Quote]

View vi=rightList.getChildAt(pos); 得到的View就是你的ListView每个Item所使用的布局或者View。如果你重写了Adapter,这个View就是你Adapter里面getView方法返回出的View。至于到底是一个Layout还是一个View,就看你ListView所用Adapter的实现了。注意要强制转换一下,View貌似不能直接设置背景颜色吧……这点我记不得了,好久不做Android了……

顺便打听一下:LZ头像系本人不……是的求QQ,求交往撒……
wengshh 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 i_am_studying 的回复:]
给你个思路,你试试可以不,定义一个全局变量int pos,对每次点击List做一个监听,得到一个int position赋值给全局变量,这样在用 View vi=rightList.getChildAt(pos); vi.setBackgroundColor(Color.RED);
这样应该可以了吧
[/Quote]
dCurrentColorModeIndex就相当是您说的那个全局变量。
View vi=rightList.getChildAt(pos);
这句应该有问题,它得到的View是什么控件啊~~想了很久都不知道怎么改...

谢谢你啊
I_am_studying 2011-04-28
  • 打赏
  • 举报
回复
给你个思路,你试试可以不,定义一个全局变量int pos,对每次点击List做一个监听,得到一个int position赋值给全局变量,这样在用 View vi=rightList.getChildAt(pos); vi.setBackgroundColor(Color.RED);
这样应该可以了吧

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧