запуск нового действия в onCreate работает только с задержкой - PullRequest
7 голосов
/ 30 июня 2011

У меня есть простое действие, которое показывает только две кнопки, и я хотел бы загрузить другое действие, как только оно завершится.

@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);
}

Я не получаю никаких ошибок с этим кодом, но новое действие не загружается должным образом. Таким образом, я получаю только чистый экран.

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

@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

1 Ответ

5 голосов
/ 30 июня 2011

Я не вижу никакой причины из предоставленного кода, почему вы должны вставить задержку 500 мс ... Это просто бессмысленно вставлять эту задержку. Необходимы некоторые пояснения: 1. Делали ли вы тяжелую обработку в оригинальной деятельности? 2. startActivityForResult вызывается с целью (поскольку ваши фрагменты кода не показывают никакой реализации onActivityResult)?

Я постараюсь реализовать минимальный пример и обновить пост как можно скорее ...

--- Обновление

После нескольких попыток понять и исправить эту проблему в параллельном сеансе чата, я воспроизвел проблему на свежем эмуляторе 1.5. В конечном итоге проблема возникает из-за использования android: theme = "@ android: style / Theme.Dialog" для активности вызываемого. Проблема наблюдается на Android 1.5 (как устройство, так и эмулятор). Что бы ни объявлялось во втором макете, при каждом запуске соответствующего действия ничего не отображается. Дисплей просто пустой, а нажатие на кнопку «Назад» запускает кратковременное отображение активности, но переходит к первому действию (более поздняя часть является номинальной) Я не мог объяснить, почему это происходит, и я предлагаю zidarsk8 попробовать PopupWindow или определить собственный стиль (метод проб / ошибок, основанный на определении источника Android Theme.Dialog).

...