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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!针对你的问题,以下是代码实现的详细步骤: 1. 在活动布局xml文件中定义ListView: ``` <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 2. 在活动Java代码中,定义ListView和数据源: ``` ListView listView = findViewById(R.id.list_view); String[] data = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"}; ``` 3. 使用ArrayAdapter将数据源和ListView连接起来,并设置ListView默认选中项: ``` ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); listView.setAdapter(adapter); listView.setItemChecked(2, true); ``` 其中第三个参数2表示要选中列表中的第三项,true表示设置默认为选中状态。你可以根据你的需求将其改变。 4. 在ListView的item点击事件中,修改选中项的颜色: ``` listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { for (int i = 0; i < parent.getChildCount(); i++) { if (i == position) { parent.getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); } else { parent.getChildAt(i).setBackgroundColor(Color.parseColor("#FFFFFF")); } } } }); ``` 这里使用了View的setBackgroundColor方法将选中项的背景设置为红色,未选中项的背景设置为白色。 请注意,以上代码仅为示例。具体的实现方式可能因应用需求不同而有所不同。如果有任何问题,请随时联系我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值