Android的List点击某一项之后的背景设置

来源:互联网 发布:ios开发没有mac怎么办 编辑:程序博客网 时间:2024/05/22 06:30

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);
}
}

0 0