0

在我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当用户在我的列表中按下一行时,这非常适合引发 a 。但是我怎样才能改变被按下的行的背景颜色呢?提前致谢。

4

3 回答 3

3

尝试将“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;
    }

});
于 2012-07-25T13:44:17.017 回答
1

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

出现问题是因为在某些情况下(可能不在您的)convertView 引用可以在侦听器范围之外更改。

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

于 2012-07-25T13:45:33.383 回答
0

你为什么不使用

 yourList.setOnItemClickListener(new OnItemClickListener(){

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

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

     }
 }); 
于 2012-07-25T13:52:15.440 回答