给listview里面的button设置selector后,当给listview设置listview.setOnitemClickedListener()的时候,里面的button会有press的效果。
现有一种解决方法,即使用自定义的Button,判断他的父控件是否pressed,如果是就把这个事件消耗掉,不向下传递即可。
代码如下:
1 import android.content.Context; 2 import android.util.AttributeSet; 3 import android.view.View; 4 import android.widget.Button; 5 6 public class FixedListButton extends Button { 7 8 public FixedListButton(Context context, AttributeSet attrs, int defStyle) { 9 super(context, attrs, defStyle); 10 // TODO Auto-generated constructor stub 11 } 12 13 public FixedListButton(Context context, AttributeSet attrs) { 14 super(context, attrs); 15 // TODO Auto-generated constructor stub 16 } 17 18 public FixedListButton(Context context) { 19 super(context); 20 // TODO Auto-generated constructor stub 21 } 22 23 @Override 24 public void setPressed(boolean pressed) { 25 // TODO Auto-generated method stub 26 if (pressed && getParent() instanceof View 27 && ((View) getParent()).isPressed()) { 28 return; 29 } 30 super.setPressed(pressed); 31 } 32 33 }