在onCreate()中调用Dialogs时显示黑屏

时间:2009-09-17 08:35:50

标签: android dialog

我现在在几个不同的应用程序中遇到了这个问题,我似乎无法找到解决方案。

如果在Activity的onCreate()中,我启动了一个使用对话框主题的活动,它不会在屏幕上绘制任何内容......整个屏幕都保持黑色。所有观点都在那里(例如,我可以点击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 个答案:

答案 0 :(得分:6)

事实证明,这是1.5中的known bug(在1.6中固定,在1.1中从来不是问题)。该错误源于在绘制旧活动之前发生的新活动的动画,但它仅在“旧”活动是任务中的第一个活动时才会出现。

解决方法是禁用主题的动画。最简单的方法是使用扩展主对话框主题的新主题来实现它。

RES /值/的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 :(得分:1)

在这里猜一下......

我认为@android:style/Theme.Dialog的大部分背景设置为半透明。最初,您的MainActivity背景为黑色。如果startActivityForResult()MainActivity获取之前就已经开始了,那么这可能会解释您的问题。

尝试在postDelayed()上使用ViewstartActivityForResult()延迟几百毫秒,看看是否会改变行为。