如何在监听器中使用上下文?

时间:2013-03-05 14:37:29

标签: java android listener android-context

我有这样的代码:

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,我给它的上下文,上下文真的让我困惑。

2 个答案:

答案 0 :(得分:7)

将其更改为:

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

它想要一个扩展Context的任何类的实例。因为它在匿名内部类中,所以当你使用this时,你指的是内部类实例,而不是你的Activity。我的代码段引用了包装匿名内部类的Activity类。由于Activity扩展了Context,因此这是一个有效的参数。

答案 1 :(得分:4)

在听众中,this指的是Listener。尝试使用ActivityName.this