触摸时设置元素的背景颜色 - android

时间:2012-07-25 13:31:43

标签: android

在我的CustomAdapter列表中,当用户按下其中一行时,我想更改列表中一行的背景颜色。

我有一个静态类,它包含列表每行中的对象:

static class ViewHolder {
    ImageView image;
    TextView text;   
}

持有人包含我名单中的元素:

 holder = new ViewHolder();
 holder.image = (ImageView) convertView.findViewById(R.id.imageView1); 
 holder.text = (TextView) convertView.findViewById(R.id.textView1); 
 convertView.setTag(holder);

 holder.image.setImageResource(items.get(position).getImage());
 holder.text.setText(items.get(position).getTextToView());

对于这个convertView,我以这种方式添加了setOnTouchListener

 convertView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch(event.getAction()) {

            case MotionEvent.ACTION_DOWN:

                //Toast.makeText(c, "DOWN", Toast.LENGTH_SHORT).show();
                break;
            case MotionEvent.ACTION_UP:
                //Toast.makeText(c, "UP", Toast.LENGTH_SHORT).show();
                break;
            }

            return false;
        }

    });

我试过了:

    convertView.setBackgroundColor(Color.RED); 

但是我的编辑抱怨说,convertView应该是final并且会干扰其他一些代码。

当用户按下列表中的行时,这非常适用于引发Toast。 但是,如何更改按下的行的背景颜色?提前致谢。

3 个答案:

答案 0 :(得分:2)

尝试将“final”修饰符设置为指向convertView的对象。

final View view = convertView;

holder = new ViewHolder();
holder.image = (ImageView) view.findViewById(R.id.imageView1); 
holder.text = (TextView) view.findViewById(R.id.textView1); 
view.setTag(holder);

holder.image.setImageResource(items.get(position).getImage());
holder.text.setText(items.get(position).getTextToView());    

// And the listener
view.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch(event.getAction()) {

        case MotionEvent.ACTION_DOWN:
            view.setBackgroundColor(Color.RED); 
            //Toast.makeText(c, "DOWN", Toast.LENGTH_SHORT).show();
            break;
        case MotionEvent.ACTION_UP:
            //Toast.makeText(c, "UP", Toast.LENGTH_SHORT).show();
            break;
        }

        return false;
    }

});

答案 1 :(得分:1)

解决问题的简单方法 - 使用临时最终变量。

出现问题是因为在某些情况下(可能不在你的上面),convertView的引用可以在监听器范围之外进行更改。

更多类似Android的解决方案 - 尽可能使用状态drawable - http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

答案 2 :(得分:0)

为什么不使用

 yourList.setOnItemClickListener(new OnItemClickListener(){

     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

       ....
       view.setBackgroundColor(....);
       ....

     }
 });