本帖最后由 hz14apple 于 2011-05-24 14:09:54 编辑

解决方案 »

  1.   


    m_ListView.setOnItemClickListener(new ListView.OnItemClickListener(){
    //重载click函数,实现需要的功能
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
    try
    {
    arg1.setBackgroundColor(Color.RED);
    String sUser = m_ListData.get(arg2);
    Toast.makeText(select1.this, "点击了"+sUser,Toast.LENGTH_SHORT).show();
    }
      catch(Exception e)
    {
    e.printStackTrace();
    }
    });m_ListView.setVisibility(View.VISIBLE);
      
    }
      

  2.   

    搞过这个,印象中只要设一个属性就可以了,具体忘了,可以看下sdk嘛,应该是这个吧: .setSelector()
      

  3.   

    arg1.setBackgroundColor(Color.RED);
    这个第一次按还行,第二次就混乱了啊~怎么办?
      

  4.   

    .setSelector()就是定义一个xml文件吧,试过了,点击时全部变色了,不是选中行颜色变了...
      

  5.   

    onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
    只要改变view的背景就好了 我写了个一下 好像没什么问题 混乱是什么意思?
      

  6.   


    就是第一次点击View的时候,背景色是变色的,第二次点击其他行的时候,第一次点击行和其他一行(非第二次点击行)颜色是红色的
      

  7.   

    这个是正常的
    onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
    {
      arg1.setBackgroundColor(Color.RED);
    }
    这一句 仅仅是在你点击某个item的时候 将该行的背景颜色变红色
    你第一次点击第一行 那么第一行变红色, 你在去点击其他行其他行变红 你要是想达到其他效果要自己家控制的
      

  8.   


    不是,混乱的意思是,listview里有3行,我第一次点击第2行,第2行变红色;第二次点击第3行,结果是第1行和第2行变成红色,第3行没变色...
      

  9.   

    当然如果你listview出现了滚动条, 还要用一个ArrayList来标记哪些行背景变色了,不然在滑动的时候会有错误,你会发现没有点的item背景颜色也变了
      

  10.   

    哦,我使用了清除focus的方法,只不过这样写背景色是默认的蓝色:public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
    try
    {
    //arg0.setBackgroundColor(Color.TRANSPARENT);
    arg0.clearFocus(); 
    arg0.setFocusable(true);
    arg0.setFocusableInTouchMode(true);
    arg0.requestFocus();
    arg0.requestFocusFromTouch();
    arg0.setSelection(arg2);...
        }
    }
      

  11.   

            listview = (ListView)findViewById(R.id.LV);
            String []str = {"11","22","33"};
            ArrayAdapter<String> adapter1=new ArrayAdapter<String> (demo.this,R.layout.list_view, str);
            listview.setAdapter(adapter1);
            listview.setItemsCanFocus(true);
            listview.setOnItemClickListener(new ListView.OnItemClickListener(){ @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
    // TODO Auto-generated method stub
        arg1.setBackgroundColor(Color.RED);
    }});应该是你其他代码上有什么逻辑错误, 单这个功能是正确的 
      

  12.   

    通过改变Layout中的xml文件也可以实现
      

  13.   


    /**
         * 改变View的背景颜色
         * @param view : 需要改变背景的view对象 
         * itemView: 记录上一次改变背景的item
         */
        private void changeItemColor(View view){
      if(itemView == null){
      itemView = view;
      view.setBackgroundResource(R.drawable.news_active);
      }else{
      itemView.setBackgroundColor(Color.alpha(0));
      view.setBackgroundResource(R.drawable.news_active);
      itemView = view;
      }
      }
    这个是在自定义适配器中使用的,楼主可以试一下
    ListView最好是写自定义适配器,不然很多功能都没法实现的。
      

  14.   

    谢谢各位啦,我还是在原代码基础上加了一个判断,就解决了:public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
    try
    {
    for(int i=0;i<arg0.getCount();i++){
                View v=arg0.getChildAt(arg0.getCount()-1-i);
                if (arg2 == i) {
                    v.setBackgroundColor(0xFFB679D4);
                } else {
                    v.setBackgroundColor(Color.TRANSPARENT);
                }
            }
    ...
    }
    }