listview选项item点击切换背景问题
listview 怎么实现item点击后改变该选项的背景颜色或图片
例如:listview有2个选项{item1,item2}(我只是举例 item选项并不确定的)
默认颜色为灰色
当我点击item1后 该项背景颜色变为蓝色 点击item2后 item1颜色变回灰色 item2背景色变为蓝色
谢啦...
[解决办法]
设置点击监听,记下当前点击的是第几个(记为k),紧接着调用adapter.notifydatachanged来刷新list。
在adapter的getview中判断,如果是当前是第k项,则调用convertview.setbackgrouncolor设为蓝色背景,否则设为灰色
[解决办法]
在适配器里面的getView()中设置view.setBackgroundResource(R.color.颜色名称);如果你要选择条件的话,你可以加上自己的条件,例如:if(position % 2 == 0){view.setBackgroundResource(R.color.颜色名称);}else view.setBackgroundResource(R.color.另一种颜色名称);
[解决办法]
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;
}
}
}
[解决办法]
++
[解决办法]
本帖最后由 graceminc 于 2012-10-31 09:54:35 编辑
@Override
public boolean onOptionsItemSelected(MenuItem menu) {
switch (menu.getItemId()) {
case R.id.menuitem1:
break;
case R.id.menuitem2:
break;
default:
break;
}
return true;
}
[解决办法]
给listview添加监听
@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;
}
