http://hi.baidu.com/amauri3389/item/640365f7dea1b32a753c4c68
先描述一下要解决的问题:当前如果Android屏幕上有一个List(或者说ListView)通过点击上下键或者鼠标的滚轮滚动,List的选中项的背景就会变成黄色。但是如果点击某一项之后,该项的背景会短暂变成浅黄色,然后立刻又变成了默认的黑色,造成没有一项是处于选中状态了。OK,在这里记下解决方法,实现点击一项后背景变成和选中状态一样的图片,并且接着按上下键(滚轮滚动)还能正常选择某一项。注:我以下都是在Android2.2的模拟器环境下测试的。
准备工作:一张png格式的透明图片(52X52),一张和正常的list处于选中状态的背景接近的png格式图片(52X52)。在Android的SDK路径下E:\android-sdk_r06-windows\android-sdk-windows\platforms\android-8\data\res\drawable-mdpi,有一个list_selector_background_focus.9.png,但是如果用这个发现效果居然想到不好,不知为何……
好了,贴出代码,首先是布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="5dip"
>
<ListView android:id="@+id/hellolist"
android:layout_width="fill_parent"
android:layout_height="340dip"
></ListView>
<Button android:id="@+id/myBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/hellolist"
android:layout_alignParentBottom="true"
android:layout_marginTop="30dip"
android:text="显示选中内容" />
</RelativeLayout>
Activity类的代码:
public class NewAddListTest extends Activity {
ListView list;
Button bt;
String result="$$";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mynewlist);
bt=(Button)findViewById(R.id.myBtn);
list = (ListView) findViewById(R.id.hellolist);
String[] data=new String[]{"JQTouch","iUI","YUI","Dojo","Sencha Touch","Ext Js","Kissy","JQuery Mobile"};
ArrayAdapter<String> a=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
list.setAdapter(a);
OnItemClickListener listener=new OnItemClickListener(){
public void onItemClick(AdapterView<?>parent,View v,int position,long id){
result=parent.getItemAtPosition(position).toString();
for(int i=0;i<parent.getChildCount();i++)
{
if(i==position){ v.setBackgroundResource(R.drawable.now2);} //那张橘黄色背景图片
else {parent.getChildAt(i).setBackgroundResource(R.drawable.kkk);} // 透明的背景图片
}
}
};
OnItemSelectedListener ll=new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
result=arg0.getItemAtPosition(arg2).toString();
for(int i=0;i<arg0.getChildCount();i++)
{
if(i==arg2){ arg1.setBackgroundResource(R.drawable.now2);}//那张橘黄色背景图片
else {arg0.getChildAt(i).setBackgroundResource(R.drawable.kkk);} // 透明的背景图片
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
};
OnClickListener llClickListener=new OnClickListener(){
@Override
public void onClick(View v) {
if(result.equals("$$"))setTitle("请选择");
else setTitle(result);
}
};
bt.setOnClickListener(llClickListener);
list.setOnItemClickListener(listener);
list.setOnItemSelectedListener(ll);
}
}