猿问

访问 CountDownTimer 封闭范围内的上下文

我正在制作一个,当我想将上下文传递到使用关键字和方法在封闭范围内运行的静态函数SplashActivity时,我遇到了问题。SplashActivityCountDownTimerthisgetBaseContext()

长话短说

我试图弄清楚如何访问SplashActivity封闭范围内的上下文,即CountDownTimer.

我尝试过的:

  1. SplashActivity temp = this

    我已经对的方法做了SplashActivity temp = this;声明,但决定这对我所做的所有事情都无效,因为我必须为我所做的每个类进行声明。onCreateActivityActivityActivityActivity

  2. Context temp = this.getBaseContext();

    基本上与上面相同,但对所有的都更灵活,Activity但在我看来对于该程序仍然无效。

  3. ClassName.staticFunction(super.getBaseContext());

    这不会起作用,因为它CountDownTimer不是extends来自SplashActivity,尽管这种解决方案是我一直在寻找的解决方案。

代码:

SplashActivity.java

public class SplashActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        //...

        new CountDownTimer(3000,100) {

            //...

            public void onFinish() {

                MainActivity.StartActivity( SplashActivity.getBaseContext() );

                //SplashActivity. will throw an error, must replace

                finish();

            }

        }.start();

    }

}


MainActivity.java



public class MainActivity extends Activity {

    ...

    public static void StartActivity(Context mContext) {

        Intent act = new Intent(mContext, MainActivity.class);

        mContext.startActivity(act);

    }

}

我的期望:


运行MainActivity.StartActivity(something.getBaseContext)时SplashActivity CountDownTimer无需创建任何附加变量(因为内存优化),创建视图MainActivity。


小怪兽爱吃肉
浏览 75回答 1
1回答

杨魅力

目前,我正在使用这个解决方案:final Context self = this;其中插入:public class SplashActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        final Context self = this; // HERE        //...        new CountDownTimer(3000,100) {            public void onFinish() {                MainActivity.StartActivity( self ); //HERE    ...
随时随地看视频慕课网APP

相关分类

Java
我要回答