Android中设置ListView的选中的Item的背景颜色【简单模式】

来源:互联网 发布:mac钥匙串访问在哪 编辑:程序博客网 时间:2024/05/04 05:53

ListView中没有默认的选择颜色,只有选择Item后的焦点颜色,鼠标点击时Item有颜色,放开鼠标后颜色也就没有了,要实现放开鼠标后选择项的背景还是有颜色的

这篇是我转载的一篇文章,通过listview的setOnItemClickListener来设定一个position来保证getView中的position和当前点击的position是同一个position。。下一篇我通过一个demo来演示不通过setOnItemClickListener而是通过在getView中对属性值的操作来实现

1、配置main.xml

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:orientation="vertical" android:layout_width="fill_parent"      android:layout_height="fill_parent">      <ListView android:id="@+id/listView" android:listSelector="#000000"          android:layout_width="fill_parent"          android:layout_height="wrap_content" />  </LinearLayout> 
设置Item的获取焦点颜色为白色android:listSelector="#000000"(即不显示背景颜色)

2、配置用于ListView显示Item的button_layout.xml

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/LinearLayoutButton"    android:layout_width="144px"    android:layout_height="99px"    android:gravity="center"    android:orientation="vertical">                <TextView           android:id="@+id/TextViewButton"           android:layout_width="fill_parent"           android:layout_height="fill_parent"          android:textSize="20px">      </TextView>              </LinearLayout>  
3、实现Activity

package com.listButtonTest.www;    import java.util.ArrayList;    import android.app.Activity;  import android.content.Context;  import android.graphics.Color;  import android.os.Bundle;  import android.os.Handler;  import android.os.Message;  import android.view.LayoutInflater;  import android.view.View;  import android.view.ViewGroup;  import android.widget.AdapterView;  import android.widget.BaseAdapter;  import android.widget.LinearLayout;  import android.widget.ListView;  import android.widget.TextView;    public class listButtonTest extends Activity {      private ListView listView = null;      private ListAdapter listAdapter = null;        /** Called when the activity is first created. */      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          listView = (ListView) this.findViewById(R.id.listView);          ArrayList<ButtonView> buttonListView = new ArrayList<ButtonView>();          ButtonView a = new ButtonView(R.string.l1);          buttonListView.add(a);          ButtonView b = new ButtonView(R.string.l2);          buttonListView.add(b);          ButtonView c = new ButtonView(R.string.l3);          buttonListView.add(c);          ButtonView d = new ButtonView(R.string.l4);          buttonListView.add(d);          ButtonView e = new ButtonView(R.string.l5);          buttonListView.add(e);            listAdapter = new ListAdapter(buttonListView);          listView.setAdapter(listAdapter);          listView.setDividerHeight(0);            listView.setOnItemClickListener(new ListView.OnItemClickListener() {                @Override              public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,                      long arg3) {                  // TODO Auto-generated method stub                  listAdapter.setSelectedPosition(arg2);                                     listAdapter.notifyDataSetInvalidated();                   }          });      };             public class ListAdapter extends BaseAdapter {            ArrayList<ButtonView> arrayList = null;          LayoutInflater inflater;          View view;          ButtonLayoutHolder buttonLayoutHolder;          LinearLayout buttonLayout = null;          TextView buttonText = null;            private int selectedPosition = -1;// 选中的位置            public ListAdapter(ArrayList<ButtonView> buttonListView) {              // TODO Auto-generated constructor stub              arrayList = buttonListView;          }            @Override          public int getCount() {              // TODO Auto-generated method stub              return arrayList.size();          }            @Override          public Object getItem(int position) {              // TODO Auto-generated method stub              return arrayList.get(position);          }            @Override          public long getItemId(int position) {              // TODO Auto-generated method stub              return position;          }            public void setSelectedPosition(int position) {              selectedPosition = position;          }            @Override          public View getView(int position, View convertView, ViewGroup parent) {              // TODO Auto-generated method stub              inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);              view = inflater.inflate(R.layout.button_layout, null, false);              buttonLayoutHolder = (ButtonLayoutHolder) view.getTag();                if (buttonLayoutHolder == null) {                  buttonLayoutHolder = new ButtonLayoutHolder();                  buttonLayoutHolder.buttonLayout = (LinearLayout) view                          .findViewById(R.id.LinearLayoutButton);                  buttonLayoutHolder.textView = (TextView) view                          .findViewById(R.id.TextViewButton);                  view.setTag(buttonLayoutHolder);              }              buttonLayout = buttonLayoutHolder.buttonLayout;              buttonText = buttonLayoutHolder.textView;              if (selectedPosition == position) {                  buttonText.setSelected(true);                  buttonText.setPressed(true);                  buttonLayout.setBackgroundColor(Color.RED);              } else {                  buttonText.setSelected(false);                  buttonText.setPressed(false);                  buttonLayout.setBackgroundColor(Color.TRANSPARENT);                   }                buttonText.setTextColor(Color.WHITE);              buttonText.setText(arrayList.get(position).textViewId);                return view;            }        };    }    class ButtonView {      int textViewId;        ButtonView(int tId) {          textViewId = tId;      }  }    class ButtonLayoutHolder {      LinearLayout buttonLayout;      TextView textView;  }  

  在listView的setOnItemClickListener事件中标记这次选择的Item的下标:listAdapter.setSelectedPosition(arg2);

 

  然后调用listAdapter.notifyDataSetInvalidated()通知后台重新刷新界面。

 

  在ListAdapter的getView()方法中,如果是选中的Item则显示背景颜色,如果不是则不显示背景颜色。



3 0
原创粉丝点击