Сплошные черные экраны при вызове диалогов в onCreate () - PullRequest
5 голосов
/ 17 сентября 2009

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

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

У кого-нибудь есть идеи?

Глупый простой пример, для развлечения:

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.main);
        startActivityForResult(new Intent(this, CredentialsInputActivity.class), 1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // do some crap with the result, doesn't really matter what
    }
}

CredentialsInputActivity довольно прост ... просто расширяет Activity и в файле манифеста установлена ​​тема @android:style/Theme.Dialog.

Ответы [ 2 ]

6 голосов
/ 19 сентября 2009

Оказывается, это известная ошибка в 1.5 (исправлена ​​в 1.6 и никогда не была проблемой в 1.1). Ошибка возникает из-за анимации для новой Деятельности, имеющей место до того, как было выполнено рисование старой Деятельности, но она отображается только в том случае, если «старая» Деятельность была первой Деятельностью в Задаче.

Обходной путь - отключить анимацию для темы. Самый простой способ сделать это с помощью новой темы, которая расширяет основную тему диалога.

разреш / значения / themes.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CupcakeDialog" parent="android:Theme.Dialog">
        <item name="android:windowAnimationStyle">@null</item>
    </style>
</resources>

Тогда просто укажите это в вашем AndroidManifest.xml:

<!-- ... -->
<activity 
    android:name=".CredentialsInputActivity"
    android:label="@string/CredentialsInputActivity_window_title"
    android:theme="@style/CupcakeDialog" />
<!-- ... -->

Очевидно, вы теряете анимацию, но, по крайней мере, вы можете ее видеть:)

Примечание: решение commonsware.com также хорошо работало с предупреждением, которое я отметил в комментариях.

1 голос
/ 17 сентября 2009

Просто угадай здесь ...

Я думаю, @android:style/Theme.Dialog установлен для большей части прозрачного фона. Изначально фон вашего MainActivity черный. Если startActivityForResult() начинает действовать до того, как ваш MainActivity начинает рисовать, это может объяснить вашу проблему.

Попробуйте использовать postDelayed() на View, чтобы задержать ваш startActivityForResult() на несколько сотен миллисекунд, и посмотрите, не изменит ли это поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...