我正在学习Android(具有讽刺意味的是,它来自Google和SO的跨开发者网站),但我在迈出第一步时遇到了麻烦。我要进行的事件的顺序是:
1.加载初始页面
2. 5秒钟后(这是暂时的...最终将被用来掩盖加载时间),切换到主视图
3.在主视图加载中,弹出一个导航窗口(当前为alertDialog),该窗口为用户提供了两个按钮按下选项
除了一个问题,我已经全部工作了。当启动页面出现时(应用启动时),nag窗口立即弹出。您可以看到启动页面在nag窗口下运行良好,等待5秒钟,然后切换到main。有人可以告诉我我正在做错什么,直到尝试在启动页面计数完成之前不弹出导航窗口? Java主页面粘贴在下面:
public class MyProject extends Activity {
protected Dialog mSplashDialog;
private static final int NAG_BOX = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyStateSaver data = (MyStateSaver) getLastNonConfigurationInstance();
if (data != null) {
// Show splash screen if still loading
if (data.showSplashScreen) {
showSplashScreen();
}
setContentView(R.layout.main);
showDialog(NAG_BOX);
// Rebuild your UI with your saved state here
} else {
showSplashScreen();
setContentView(R.layout.main);
// Do your heavy loading here
}
}
@Override
public Object onRetainNonConfigurationInstance() {
MyStateSaver data = new MyStateSaver();
// Save your important data here
if (mSplashDialog != null) {
data.showSplashScreen = true;
removeSplashScreen();
}
return data;
}
/**
* Removes the Dialog that displays the splash screen
*/
protected void removeSplashScreen() {
if (mSplashDialog != null) {
mSplashDialog.dismiss();
mSplashDialog = null;
}
}
/**
* Shows the splash screen over the full Activity
*/
protected void showSplashScreen() {
mSplashDialog = new Dialog(this, R.style.SplashScreen);
mSplashDialog.setContentView(R.layout.splash);
mSplashDialog.setCancelable(false);
mSplashDialog.show();
// Set Runnable to remove splash screen just in case
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
removeSplashScreen();
}
}, 5000);
}
/**
* Simple class for storing important data across config changes
*/
private class MyStateSaver {
public boolean showSplashScreen = false;
// Your other important fields here
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case NAG_BOX:
// This example shows how to add a custom layout to an AlertDialog
LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.nagbox, null);
return new AlertDialog.Builder(MyProject.this)
.setView(textEntryView)
.setNegativeButton("Maybe Later", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dismissDialog(NAG_BOX);
}
})
.setPositiveButton("Go To Site", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Uri url = Uri.parse("http://www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, url);
startActivity(intent);
}
})
.create();
}
return null;
}
}
最佳答案
关闭启动画面后,为什么不调用showDialog(NAG_BOX)?
protected void removeSplashScreen() {
if (mSplashDialog != null) {
mSplashDialog.dismiss();
mSplashDialog = null;
showDialog(NAG_BOX);
}
}