读书人

android中设立ListView的选中的Item的

发布时间: 2012-08-21 13:00:21 作者: rapoo

android中设置ListView的选中的Item的背景颜色

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

?

??

?

???

?

1、配置main.xml

?

??? 设置Item的获取焦点颜色为白色android:listSelector="#000000"(即不显示背景颜色)

?

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

?

?

?

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. */@Overridepublic 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() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {// TODO Auto-generated method stublistAdapter.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 stubarrayList = buttonListView;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn arrayList.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn arrayList.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}public void setSelectedPosition(int position) {selectedPosition = position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubinflater = (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则显示背景颜色,如果不是则不显示背景颜色。

?

?

?

??

1 楼 dellheng 2012-01-04 谢了,正需要

读书人网 >Android

热点推荐