2013-03-05 34 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