观察到一个奇怪的现象,比如:
Log.d("abc","i:"+i+"j:"+j);
boolean b = (i==j);
Log.d("abc","i==j:"+b);结果显示完全乱套,在i和j相等的时候,可能显示为false,反之可能为true。实际当中,第二个记录的地方时一个函数,Log是在那个函数里调用的。

解决方案 »

  1.   

    i和j是什么类型的 对象要用i.equals(j)比较
      

  2.   


    这是一个Gallery控件,返回的GalleryView用来显示。发现一个非常奇怪的现象,点击后,图标是变大了,说明setPadding(10,10,10,10)生效了,但是绘图部分,死活不能绘制矩形,如果跟踪会发现isSelected总是false。
    public class GalleryView extends ImageView{
    protected boolean isSelected = false;
    public GalleryView(Context context){
    super(context);
    setScaleType(ScaleType.FIT_XY);
    setPadding(10,10,10,10);
    }
    public void setSelected(boolean select){
    //Log.d("CurrentTask",""+index+",setSelected: "+isSelected);
    if(isSelected==select)
    return;
    isSelected = select;
    if(isSelected)
    setPadding(3,3,3,3);
    else
    setPadding(10,10,10,10);
    //this.invalidate();
    }
    public boolean getSelected(){
    return isSelected;
    }
    @Override
    protected void onDraw(Canvas canvas){
    if(!isSelected){
    super.onDraw(canvas);
    return;
    }
        Paint paint = new Paint();  
        paint.setColor(0xffffff00);  
        paint.setStrokeWidth(1);
        paint.setStyle(Style.STROKE);  
        canvas.drawRect(new Rect(0, 3, getWidth()-1,getHeight()-4),paint);  
        super.onDraw(canvas);
    }
    }
      

  3.   

    定义成 volatile int 试试
      

  4.   

    找到问题所在了,我定义的函数setSelected是一个内部函数重写,系统会自动呼叫它,所以把数值搞乱了。我第二个追踪记录可能不是我呼叫的,是系统呼叫的,问题出在这。