简易Listview里选中行时,如何使Item的背景色变色 本帖最后由 hz14apple 于 2011-05-24 14:09:54 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 m_ListView.setOnItemClickListener(new ListView.OnItemClickListener(){//重载click函数,实现需要的功能@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {try{ arg1.setBackgroundColor(Color.RED);String sUser = m_ListData.get(arg2);Toast.makeText(select1.this, "点击了"+sUser,Toast.LENGTH_SHORT).show();} catch(Exception e){e.printStackTrace();}});m_ListView.setVisibility(View.VISIBLE); } 搞过这个,印象中只要设一个属性就可以了,具体忘了,可以看下sdk嘛,应该是这个吧: .setSelector() arg1.setBackgroundColor(Color.RED);这个第一次按还行,第二次就混乱了啊~怎么办? .setSelector()就是定义一个xml文件吧,试过了,点击时全部变色了,不是选中行颜色变了... onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)只要改变view的背景就好了 我写了个一下 好像没什么问题 混乱是什么意思? 就是第一次点击View的时候,背景色是变色的,第二次点击其他行的时候,第一次点击行和其他一行(非第二次点击行)颜色是红色的 这个是正常的onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3){ arg1.setBackgroundColor(Color.RED);}这一句 仅仅是在你点击某个item的时候 将该行的背景颜色变红色你第一次点击第一行 那么第一行变红色, 你在去点击其他行其他行变红 你要是想达到其他效果要自己家控制的 不是,混乱的意思是,listview里有3行,我第一次点击第2行,第2行变红色;第二次点击第3行,结果是第1行和第2行变成红色,第3行没变色... 当然如果你listview出现了滚动条, 还要用一个ArrayList来标记哪些行背景变色了,不然在滑动的时候会有错误,你会发现没有点的item背景颜色也变了 哦,我使用了清除focus的方法,只不过这样写背景色是默认的蓝色:public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { try { //arg0.setBackgroundColor(Color.TRANSPARENT); arg0.clearFocus(); arg0.setFocusable(true); arg0.setFocusableInTouchMode(true); arg0.requestFocus(); arg0.requestFocusFromTouch(); arg0.setSelection(arg2);... }} listview = (ListView)findViewById(R.id.LV); String []str = {"11","22","33"}; ArrayAdapter<String> adapter1=new ArrayAdapter<String> (demo.this,R.layout.list_view, str); listview.setAdapter(adapter1); listview.setItemsCanFocus(true); listview.setOnItemClickListener(new ListView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub arg1.setBackgroundColor(Color.RED); }});应该是你其他代码上有什么逻辑错误, 单这个功能是正确的 通过改变Layout中的xml文件也可以实现 /** * 改变View的背景颜色 * @param view : 需要改变背景的view对象 * itemView: 记录上一次改变背景的item */ private void changeItemColor(View view){ if(itemView == null){ itemView = view; view.setBackgroundResource(R.drawable.news_active); }else{ itemView.setBackgroundColor(Color.alpha(0)); view.setBackgroundResource(R.drawable.news_active); itemView = view; } }这个是在自定义适配器中使用的,楼主可以试一下ListView最好是写自定义适配器,不然很多功能都没法实现的。 谢谢各位啦,我还是在原代码基础上加了一个判断,就解决了:public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { try { for(int i=0;i<arg0.getCount();i++){ View v=arg0.getChildAt(arg0.getCount()-1-i); if (arg2 == i) { v.setBackgroundColor(0xFFB679D4); } else { v.setBackgroundColor(Color.TRANSPARENT); } }...}} ProgressBar Android TabWidget问题,各位大侠帮帮忙 菜鸟问一个Android中的setOnKeyListener事件问题 装了JDK-SDK-Eclipse后提示 部署android环境问题 android editetextview 软键盘弹出后直接把我的输入框给隐藏了。 求指导!如何弹出对话框? 新手求助,求思路,手机应用简单效果实现 Android 双网卡同时上网上层处理 请教大神们一个问题 [ Help ] Android Screen size issue 如果调用系统剪裁功能
m_ListView.setOnItemClickListener(new ListView.OnItemClickListener(){
//重载click函数,实现需要的功能
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
try
{
arg1.setBackgroundColor(Color.RED);
String sUser = m_ListData.get(arg2);
Toast.makeText(select1.this, "点击了"+sUser,Toast.LENGTH_SHORT).show();
}
catch(Exception e)
{
e.printStackTrace();
}
});m_ListView.setVisibility(View.VISIBLE);
}
这个第一次按还行,第二次就混乱了啊~怎么办?
只要改变view的背景就好了 我写了个一下 好像没什么问题 混乱是什么意思?
就是第一次点击View的时候,背景色是变色的,第二次点击其他行的时候,第一次点击行和其他一行(非第二次点击行)颜色是红色的
onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
{
arg1.setBackgroundColor(Color.RED);
}
这一句 仅仅是在你点击某个item的时候 将该行的背景颜色变红色
你第一次点击第一行 那么第一行变红色, 你在去点击其他行其他行变红 你要是想达到其他效果要自己家控制的
不是,混乱的意思是,listview里有3行,我第一次点击第2行,第2行变红色;第二次点击第3行,结果是第1行和第2行变成红色,第3行没变色...
long arg3) {
try
{
//arg0.setBackgroundColor(Color.TRANSPARENT);
arg0.clearFocus();
arg0.setFocusable(true);
arg0.setFocusableInTouchMode(true);
arg0.requestFocus();
arg0.requestFocusFromTouch();
arg0.setSelection(arg2);...
}
}
String []str = {"11","22","33"};
ArrayAdapter<String> adapter1=new ArrayAdapter<String> (demo.this,R.layout.list_view, str);
listview.setAdapter(adapter1);
listview.setItemsCanFocus(true);
listview.setOnItemClickListener(new ListView.OnItemClickListener(){ @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
arg1.setBackgroundColor(Color.RED);
}});应该是你其他代码上有什么逻辑错误, 单这个功能是正确的
/**
* 改变View的背景颜色
* @param view : 需要改变背景的view对象
* itemView: 记录上一次改变背景的item
*/
private void changeItemColor(View view){
if(itemView == null){
itemView = view;
view.setBackgroundResource(R.drawable.news_active);
}else{
itemView.setBackgroundColor(Color.alpha(0));
view.setBackgroundResource(R.drawable.news_active);
itemView = view;
}
}
这个是在自定义适配器中使用的,楼主可以试一下
ListView最好是写自定义适配器,不然很多功能都没法实现的。
long arg3) {
try
{
for(int i=0;i<arg0.getCount();i++){
View v=arg0.getChildAt(arg0.getCount()-1-i);
if (arg2 == i) {
v.setBackgroundColor(0xFFB679D4);
} else {
v.setBackgroundColor(Color.TRANSPARENT);
}
}
...
}
}