Intereting Posts
Android QRCode Scanner Library Разработка Android – «ошибка отсутствия темы» в eclipse ide для макетов xml-файлов NullPointerException с помощью ProgressBar с использованием ActionBarCompat Перерисовать / обновить Itemizedoverlay? (Android / google maps api) Android: как подключиться к телефону? Android: настройка локальной VPN, используемой для перехвата пакетов. Что делать, когда вы пытаетесь создать приложение для Android, и «Нет доступных целей»? Как создать уведомление о строке состояния с помощью телефонной затычки Анализ локального XML-файла с использованием Sax в Android Почему использование XML для создания графического интерфейса является хорошей практикой в ​​Android Не удалось обнаружить завершение работы TTS (callback) android. Android: Как вы можете получить фреймбуфер (скриншот) на корневом устройстве? Режим Lite в Google Maps вызывает зависание в RecyclerView Как управлять «startActivityForResult» на Android? Обнаружение службы BLE для Android (BluetoothGatt # DiscoverServices ()) и Low Energy vs BR / EDR

Динамический запуск в Android?

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

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

,

if (condition) { startActivity(new Intent(this, MenuActivity.class)); } else { startActivity(new Intent(this, LoginActivity.class)); } 

Solutions Collecting From Web of "Динамический запуск в Android?"

Почему бы не иметь начальную Activity без пользовательского интерфейса, который проверяет условие в своем onCreate , затем запускает следующее действие, а затем вызывает 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); } 

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

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

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

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

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