我有一个listview,我想当我点击一行时,它的背景变为蓝色。我使用这段代码:
listView1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
parent.getChildAt(position).setBackgroundColor(Color.BLUE);
}
});
这种做法有些不对劲。当我点击第一个项目时,它变为蓝色,但项目#3和#5也变为蓝色!我不明白为什么!!我只想让所选项目变为蓝色!!!
答案 0 :(得分:2)
如何使用选择器?它们正常工作并提供清洁的解决方案。
<强> listselector.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/normal" />
<item
android:state_selected="true"
android:state_focused="false"
android:drawable="@drawable/hover"
/>
<item
android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/hover" />
</selector>
<强> normal.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid
android:color="#cccccc"
/>
</shape>
<强> hover.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid
android:color="#dddddd"
/>
</shape>
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:listSelector="@drawable/listselector"
/>
关键属性是为android:listSelector="@drawable/listselector"
设置ListView
。
您可以在形状中使用渐变属性而不是纯色。有关详细信息,您还可以查看教程Android Custom ListView。
答案 1 :(得分:0)
如果您有自定义列表视图,请使用以下代码。
public View getView(final int arg0, View arg1, ViewGroup arg2) {
final ViewHolder vh;
vh= new ViewHolder();
if(arg1==null )
{
arg1=mInflater.inflate(R.layout.lyourcustomlayouttobe inflated, arg2,false);//custom layout inflated
arg1.setTag(vh);
}
return arg1;
}
您的自定义布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:cacheColorHint="#000000"
android:background="@drawable/listviewbkg">
//other items to be inlfated.
</LinearLayout>
在资源下创建一个可绘制文件夹。将以下xml发布为listviewbkg
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/pressed" />
<item android:state_focused="false"
android:drawable="@drawable/normal" />
</selector>
在drawable下使用名称normal.xml时的正常形状
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>//change color
<stroke android:width="3dp"
android:color="#0FECFF" /><!-- #330000FF #ffffffff -->//border color
<gradient // remove the gradient if do not wish to use.
android:startColor="#ffffffff"
android:endColor="#110000FF"
android:angle="90"/>
<padding android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp"/>
<corners android:bottomRightRadius="7dp" // change this to increase the rounded edge radius
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp"/>
</shape>
在drawable文件夹中名为pressed.xml的情况下按下时的形状
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF1A47"/> //change color
<stroke android:width="3dp"
android:color="#0FECFF"/>//border color
<padding android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp"/>
<corners android:bottomRightRadius="7dp"// increase the radius at the edge
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp"/>
</shape>
答案 2 :(得分:0)
使用listselectors来实现这个目标:
Hree就是一个例子: http://www.michenux.net/android-listview-highlight-selected-item-387.html
如果你想让你的列表视图项颜色永久化,那么你需要创建一个array
个选定的位置,在你的cutom适配器的getview()
方法中,你需要检查这个位置是否是是否存在于数组中,如果是,则手动更改视图的背景颜色