listview 怎么实现item点击后改变该选项的背景颜色或图片
例如:listview有2个选项{item1,item2}(我只是举例 item选项并不确定的)
默认颜色为灰色
当我点击item1后 该项背景颜色变为蓝色 点击item2后 item1颜色变回灰色 item2背景色变为蓝色谢啦...

解决方案 »

  1.   

    设置点击监听,记下当前点击的是第几个(记为k),紧接着调用adapter.notifydatachanged来刷新list。
    在adapter的getview中判断,如果是当前是第k项,则调用convertview.setbackgrouncolor设为蓝色背景,否则设为灰色
      

  2.   

    在适配器里面的getView()中设置view.setBackgroundResource(R.color.颜色名称);如果你要选择条件的话,你可以加上自己的条件,例如:if(position % 2 == 0){view.setBackgroundResource(R.color.颜色名称);}else view.setBackgroundResource(R.color.另一种颜色名称);
      

  3.   


    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;
            }
            
            
        }
        }
      

  4.   

    本帖最后由 graceminc 于 2012-10-31 09:54:35 编辑
      

  5.   

    给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;
    }
      

  6.   

    package com.test.main;import java.util.ArrayList;
    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();
    }
    }
    }
      

  7.   

    package com.test.main;
    //
    //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;
    }
    };
    }
      

  8.   

    item.xml
    <?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>