Доступ к контексту в закрытой области действия CountDownTimer - PullRequest
0 голосов
/ 28 октября 2019

Я делаю SplashActivity, и я столкнулся с проблемой, когда хочу передать контекст SplashActivity в статическую функцию, которая запускается в закрытой области видимости CountDownTimer с использованием ключевого слова this и метода getBaseContext().

TL; DR

Я пытаюсь выяснить, как получить доступ к контексту SplashActivity во вложенной области видимости, то есть CountDownTimer.

Что я пробовал:

  1. SplashActivity temp = this

    Я сделал SplashActivity temp = this; декларацию onCreate метод Activity, но решил, что это будет неэффективно для всех Activity, которые я сделал, так как я должен объявить Activity для каждого Activity класса, который я сделал.

  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 представление.

1 Ответ

0 голосов
/ 28 октября 2019

Сейчас я использую это решение:

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
    ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...