Вопрос

Есть ли способ динамически изменить начальную деятельность в Android на основе условного? То, что я пытался сделать (это не сработало), было следующим:

  1. Удалить категорию пускового установки, как определено в моем AndroidManifest.xml
  2. Создайте пользовательский класс приложений, который использует приложение
  3. переопределите метод Oncreate моего класса приложения, чтобы определить какой -то код, например, следующее:

.

if (condition) {
    startActivity(new Intent(this, MenuActivity.class));
} else {
    startActivity(new Intent(this, LoginActivity.class));
}
Это было полезно?

Решение

Почему бы не иметь начального Activity без пользовательского интерфейса, который проверяет состояние в его onCreate, затем запускает следующий Activity, затем звонит finish() на себе? Я никогда не звонил finish() изнутри onCreate() Хотя, поэтому я не уверен, сработает ли это.

РЕДАКТИРОВАТЬ
Кажется, работает нормально. Вот какой -то код, чтобы сделать его яснее.
Исходный Activity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent;
    if (condition) {
       intent = new Intent(this, ClassA.class);
    } else {
       intent = new Intent(this, ClassB.class);
    }
    startActivity(intent);
    finish();
    // note we never called setContentView()
}

Другой Activity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

Другие советы

Вот что я лично сделал для одного из моих маленьких мобильных проектов. Вместо создания отдельного, без экрана Activity Где условие и которое запускает соответствующий экран, я помещаю условие в один Activity и сделал динамику setContentView(), как в:

if (!userIsLoggedIn) {
    setContentView(R.layout.signup);
} else {
    setContentView(R.layout.homescreen);
}

Две важные заметки к этому подходу:

1: вместо того, чтобы писать это в onCreate(), вы хотите поместить принятие решений внутрь onResume() Именно потому, что последнее всегда называется всякий раз, когда экран должен отображаться впереди. Вы можете увидеть это из Android Жизненный цикл деятельности. Анкет Поэтому, если, например, пользователь только что загрузил мое приложение и запустил его в первый раз, потому что ни один пользователь не входит в систему, она будет приведена на страницу регистрации. Когда она закончила подписаться, и по какой -то причине нажимает HOME Кнопка (нет BACK, который вообще выходит из приложения!), А затем возобновляет приложение, макет, который она увидит, уже является домашним экраном. Если я положу условную внутрь onCreate(), что было бы отображено, так это экран регистрации, потому что в соответствии с жизненным циклом он не возвращается к onCreate() При возврате приложения на фронт.

2: Это решение идеально подходит только в том случае, если объединение функциональных возможностей этих двух действий не даст длинный дьявольский блок кода. Как я уже сказал, мой проект был маленьким (его основная особенность возникает на заднем плане), так что одна динамика Activity В этом не было слишком много. Без экрана Activity Определенно это путь, если вам нужен ваш код, чтобы быть более читаемым человеком.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top