2013-03-05 31 views
2

我有這樣的代碼:如何在監聽器中使用上下文?

else if (v == mSettings) 
{ 
    if (disappearView.getVisibility() == View.VISIBLE) 
    { 
     AlphaAnimation fadeOutAnimation = new AlphaAnimation(1, 0); // start alpha, end alpha 
     fadeOutAnimation.setDuration(1000); // time for animation in milliseconds 
     fadeOutAnimation.setFillAfter(true); // make the transformation persist 
     Animation out = AnimationUtils.makeOutAnimation(this, true); 
     disappearView.startAnimation(out); 
     disappearView.setVisibility(View.INVISIBLE); 
     out.setAnimationListener(new Animation.AnimationListener() 
     { 
      public void onAnimationEnd(Animation animation) 
      { 
       disappearView.setVisibility(View.GONE); 
       Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); 
       bannerView.startAnimation(in); 
       bannerView.setVisibility(View.VISIBLE); 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { } 

      @Override 
      public void onAnimationStart(Animation animation) { } 
     }); 
    } 
    else { 
     Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); 
     disappearView.startAnimation(in); 
     disappearView.setVisibility(View.VISIBLE); 
     bannerView.setVisibility(View.INVISIBLE); 
     bannerView.setVisibility(View.GONE); 
    } 
} 

它所有的工作除了本節中的animationListener:

Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); 

它想要一個有效的上下文,但它正在接收animationListener,做什麼方面,我給它,情境真的讓我感到困惑。

回答

7

將其更改爲:

Animation in = AnimationUtils.loadAnimation(MyActivityName.this, android.R.anim.fade_in); 

它希望擴展Context任何類的一個實例。由於它位於匿名內部類中,所以當您使用this時,您指的是內部類實例,而不是您的活動。我的代碼片段引用了包裝匿名內部類的Activity類。由於Activity擴展了上下文,所以這是一個有效的參數。

4

在收聽者中,this指的是Listener。嘗試使用ActivityName.this