У меня есть простая активность, которая показывает только две кнопки, и я хотел бы загрузить другую активность, как только она будет завершена.
@Override public void onCreate(Bundle savedInstanceState) { dbg("starting on create"); super.onCreate(savedInstanceState); dbg("stting content view"); setContentView(R.layout.main); createDrPopup(); } private void createDrPopup(){ dbg( "created new activity"); startActivityForResult(new Intent(this, DrPopup.class), DR_POPUP_ACTIVITY_ID); }
Я не получаю никаких ошибок с этим кодом, но новая активность не загружается должным образом. Таким образом, я получаю только экран blanc.
Но если я вызову новую активность с задержкой, тогда все будет хорошо.
@Override public void onCreate(Bundle savedInstanceState) { dbg("starting on create"); super.onCreate(savedInstanceState); dbg("stting content view"); setContentView(R.layout.main); Thread splashTread = new Thread() { @Override public void run() { try { sleep(500); } catch(InterruptedException e) { } finally { createDrPopup(); } } }; splashTread.start(); } private void createDrPopup(){ dbg( "created new activity"); startActivityForResult(new Intent(this, DrPopup.class), DR_POPUP_ACTIVITY_ID); }
Мой вопрос таков:
Есть ли лучший способ подождать завершения операции. Я даже не могу быть уверен, что 500 мс будет достаточно каждый раз.
Благодарим вас за любые предложения.
Запрошенный код для dr_popup (это так просто, как это получается)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); dbg("Created new activity"); setContentView(R.layout.dr_webview); dbg("web view created"); }
И оба макета
главный
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:text="Button" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Spinner android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="wrap_content" android:id="@+id/spinner1"></Spinner> </LinearLayout>
выскакивать
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dr_popup_webview_layout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dr_popup_webview" android:layout_width="fill_parent" android:layout_height="100dip"/> <LinearLayout android:id="@+id/frameLayout1" android:layout_height="100dip" android:layout_width="fill_parent" android:orientation="horizontal"> <EditText android:id="@+id/dr_submit_text" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="4"> <requestFocus></requestFocus> </EditText> <Button android:text="Button" android:id="@+id/dr_submit_button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="1"></Button> </LinearLayout> </LinearLayout>
Edit: проблема, похоже, вызвана манифестной линией @android: style / Theme.Dialog
<activity android:theme="@android:style/Theme.Dialog" android:name=".DrPopup" android:label="@string/dr_popup"> </activity>
Если я удалю это, все будет работать, но я бы хотел, чтобы решение работало даже с этой линией.
И изображение, которое показывает проблему. http://i.imgur.com/ZOcyw.png
Я не вижу никакой причины из предоставленного кода, почему вам нужно вставить задержку в 500 мс … Это просто не смысл вставить эту задержку. Необходимы некоторые разъяснения: 1. Выполняли ли вы тяжелую обработку в рамках первоначальной деятельности? 2. startActivityForResult вызывается с целью (поскольку в ваших фрагментах кода нет реализации onActivityResult)?
Я попытаюсь реализовать минимальный пример и обновить сообщение как можно скорее …
– Обновление
После нескольких попыток понять и исправить эту проблему в параллельном сеансе чата я воспроизвел проблему на новом эмуляторе 1.5. Проблема окончательно исходит от использования android: theme = "@ android: style / Theme.Dialog" для активности вызываемого абонента. Проблема наблюдается на android 1.5 (как на устройстве, так и на эмуляторе). Независимо от того, что объявлено во втором макете, всякий раз, когда запущена связанная с ней деятельность, ничего не отображается. Дисплей просто пуст, и нажатие на кнопку «назад» инициирует переходное отображение активности, но переходит к первому действию (более поздняя часть является номинальной). Я не мог объяснить, почему это происходит, и я предлагаю zidarsk8 дать PopupWindow попробовать или определить собственный стиль (пробный / ошибочный подход, основанный на определении источника android Theme.Dialog).