Можете ли вы использовать конструктор в Child Activity, чтобы изменить строковую переменную Parent Activity? - PullRequest
0 голосов
/ 16 января 2020

У меня есть класс Parent Activity, с которого расширяются все мои классы Child Activity. Это родительское действие имеет поле с именем 'activity_Id', которое является строкой и по умолчанию имеет значение null.

В onCreate родительского действия мне нужно проверить, имеет ли это поле значение, которое оно получит только из дочернего действия, если оно выполнит некоторые другие логи c в onCreate объекта. родительская деятельность.

Обратите внимание, что у каждого действия есть уникальный 'action_Id', который используется для изменения другого логика c, который выполняется.

Вот ParentActivity:

public class ParentActivity extends Activity{
    protected String activity_Id = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if(activity_Id != null)
            //DO OTHER LOGIC UNIQUE TO THIS STRING ID
    }
}

Вот ChildActivity:

public class ChildActivity extends ParentActivity{

    public ChildActivity(){
        super();
        activity_Id = "Foo123";
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

Эта строка Activity_Id предопределена, но не соответствует имени действия, поэтому я не могу do

this.getClass().getName()

в моем классе ParentActivity.

Это похоже на способ чистоты, НО, кажется, есть какие-то табу вокруг использования конструкторов в действиях, поэтому я просто хочу убедиться, что я не нарушаю что-нибудь. Или если кто-то может придумать более чистый способ сделать это?

1 Ответ

1 голос
/ 16 января 2020

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

Попробуйте это так

public abstract class ParentActivity extends Activity{
    protected abstract String activityId();
    .....
}

Затем в дочерней активности переопределите activityId() с требуемым значением , И теперь вы можете сравнить activityId() в ParentActivity onCreate(...) метод.

...