listview 怎么实现item点击后改变该选项的背景颜色或图片
例如:listview有2个选项{item1,item2}(我只是举例 item选项并不确定的)
默认颜色为灰色
当我点击item1后 该项背景颜色变为蓝色 点击item2后 item1颜色变回灰色 item2背景色变为蓝色谢啦...
例如:listview有2个选项{item1,item2}(我只是举例 item选项并不确定的)
默认颜色为灰色
当我点击item1后 该项背景颜色变为蓝色 点击item2后 item1颜色变回灰色 item2背景色变为蓝色谢啦...
在adapter的getview中判断,如果是当前是第k项,则调用convertview.setbackgrouncolor设为蓝色背景,否则设为灰色
package com.ttt;import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;public class ListTest extends Activity {
ListView listTest;
List<String> list = new ArrayList<String>();
Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
ListAdapter adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testlist);
listTest = (ListView) findViewById(R.id.testlist);
adapter = new ListAdapter();
listTest.setAdapter(adapter);
listTest.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Iterator<Integer> it = map.keySet().iterator();
while(it.hasNext()) {
Integer itr = it.next();
if(itr != position) {
map.put(itr, false);
} else {
map.put(itr, true);
}
}
adapter.notifyDataSetChanged();
}
});
}
class ListAdapter extends BaseAdapter {
LayoutInflater factory;
public ListAdapter() {
for(int i = 0; i < 30; i++) {
list.add(i + "");
map.put(i, false);
}
factory = LayoutInflater.from(ListTest.this);
} @Override
public int getCount() {
return list.size();
} @Override
public Object getItem(int position) {
return list.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout lin = null;
TextView tv = null;
if(convertView == null) {
convertView = factory.inflate(R.layout.listitem, null);
}
lin = (LinearLayout) convertView.findViewById(R.id.lin);
tv = (TextView) convertView.findViewById(R.id.test);
tv.setText(list.get(position));
if(map.get(position)) {
lin.setBackgroundColor(Color.parseColor("#0000CD"));
} else {
lin.setBackgroundColor(Color.parseColor("#DCDCDC"));
}
return convertView;
}
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
LayoutInflater inflater = mContext.getLayoutInflater();
convertView = inflater.inflate(R.layout.vlist, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
//绘制的时候判断是否是选中项,是绘制选中的状态,否则绘制非选中的状态
if(selectedId == position){
holder.text.setBackgroundResource(R.drawable.diancai2);
}else{
holder.text.setBackgroundResource(R.drawable.diancai3);
}
holder.text.setText(mList.get(position));
return convertView;
}
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;public class TestAdapter extends BaseAdapter {
protected ArrayList<String> mList;
//记录选中的项,绘制的时候判断positon为该值就改变背景
public static int selectedId = 0;
Activity mContext;
public TestAdapter(Activity context) {
mContext = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
LayoutInflater inflater = mContext.getLayoutInflater();
convertView = inflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
//绘制的时候判断是否是选中项,是绘制选中的状态,否则绘制非选中的状态
if(selectedId == position){
holder.text.setBackgroundResource(R.drawable.diancai3);
}else{
holder.text.setBackgroundResource(R.drawable.diancai2);
}
holder.text.setText(mList.get(position));
return convertView;
}
@Override
public int getCount() {
return mList.size();
} @Override
public Object getItem(int arg0) {
return mList.get(arg0);
} @Override
public long getItemId(int arg0) {
return arg0;
} class ViewHolder{
TextView text;
}
public ArrayList<String> getmList() {
return mList;
} public void setmList(ArrayList<String> mList) {
this.mList = mList;
notifyDataSetChanged();
}
/**
* 当用户选中某一项,或者按下up 或 down 按钮时调用
* 将改特殊绘制的项的id传过来,然后notifyDataSetChanged()
* 通知list重绘
* @param positon 选中项的id
*/
public void changeSelected(int positon){
if(positon != selectedId){
selectedId = positon;
notifyDataSetChanged();
}
}
}
//
//import java.util.ArrayList;
//import java.util.HashMap;
//
//import android.app.Activity;
//import android.os.Bundle;
//import android.widget.ListView;
//import android.widget.SimpleAdapter;
//
//public class SelectorActivity extends Activity {
// /** Called when the activity is first created. */
// @Override
// public void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
// ListView list=(ListView) findViewById(R.id.list_items);
//
// ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
//
// String []title={"熊掌","黑色","眼睛","绿色",
// "广播","机器人","星星","白色"};
//
//
// for (int i = 0; i < 3; i++)
//
// {
//
// HashMap<String, Object> map = new HashMap<String, Object>();
//
// map.put("more_image", R.drawable.more);
//
// map.put("title", title[i]);
//
//
// listItem.add(map);
//
// }
// SimpleAdapter listItemAdapter= new SimpleAdapter(SelectorActivity.this, listItem,R.layout.item,
// new String[] { "more_image", "title" },
//
// new int[] { R.id.more_image, R.id.title,
// });
//
// list.setAdapter(listItemAdapter);
//
//
// }
//}
//
// import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;public class SelectorActivity extends Activity implements OnItemClickListener,OnClickListener{
ListView list; //ListView
TestAdapter adapter; //list 的适配器
int position = 0; //当前选中的项
int firstVisiablePositon = 0; //list中可见的第一项
int lastVisiablePositon = 0; //list中可见的最后一项
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
} private void initView() {
//初始化及其适配器
list = (ListView) findViewById(R.id.list_items);
adapter = new TestAdapter(this);
//往适配器中添加数据
ArrayList<String> aList = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
aList.add("列表第 " + (i + 1) + "项");
}
adapter.setmList(aList);
list.setAdapter(adapter);
//给list添加监听
list.setOnItemClickListener(this);
list.setOnScrollListener(scrollListener); } @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
position = arg2; //记录选中位置,这样才能和up和down按钮联合起来
adapter.changeSelected(position); //通知重绘
doSomething();
}
@Override
public void onClick(View v) { }
//选中某项后具体要做的事情
private void doSomething() {
Toast.makeText(this, "您选中的是 " + adapter.getmList().get(position)
, Toast.LENGTH_SHORT).show();
}
private OnScrollListener scrollListener = new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
view.setSelection(position);
/**
* 当停止滑动的时候,需要调用setSelection()
* 不然的话来滑动的效果就破坏了--停止滑动后会停留再你选中的位置
*/
if(scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE){
list.setSelection(firstVisiablePositon);
}
}
/**
* 活动过程中一直回调
* 需要一直记录lastVisiablePositon 和 firstVisiablePositon
* 不然原来滑动的效果就破坏了--停止滑动后会停留再你选中的位置
*/
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
lastVisiablePositon = firstVisibleItem + visibleItemCount - 2;
firstVisiablePositon = firstVisibleItem;
}
};
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/text"
android:gravity="center"
android:background="@drawable/diancai3"
android:layout_gravity="center_horizontal">
</TextView>
</LinearLayout>