[英]starting a new activity in onCreate works only with delay
我有一个简单的活动,只显示两个按钮,我想在完成加载后立即加载另一个活动。
@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>
编辑:问题似乎是由清单行引起的@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 实现)?
我将尝试实现一个最小的示例并尽快更新帖子……
−− 更新
在通过并行聊天 session 多次尝试理解和解决此问题后,我在新的 1.5 模拟器上重现了该问题。 问题最终来自被调用者活动使用 android:theme="@android:style/Theme.Dialog" 。 在 android 1.5(设备和仿真器)上观察到该问题。 无论在第二个布局中声明什么,只要启动关联的活动,就不会显示任何内容。 显示只是空白,按下后退按钮会启动活动的瞬态显示,但 go 到第一个活动(后面部分是标称的)。 我无法解释为什么会发生这种情况,我建议 zidarsk8 尝试一下 PopupWindow 或定义自定义样式(基于 android Theme.Dialog 源定义的试错方法)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.