I’m learning Android (ironically from a cross of the developer site from Google and SO), and I’m having trouble with an early step. The order of events I am going for is:
1. Load splash page
2. After 5 seconds (this is temporary… will eventually be actually used to cover up load time), switch to main view
3. On the main view load, pop a nag window (currently an alertDialog), which gives the user two button press options
I have this all working except for ONE problem. The nag window pops immediately when the splash page comes up (when the app starts). You can see the splash page is working fine beneath the nag window, it waits 5 seconds, then switches to main. Can someone please tell me what I’m doing wrong as far as trying to get the nag window to NOT pop until the splash page count is done? Main java page is pasted below:
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;
}
}
Why not invoke showDialog(NAG_BOX) after you dismiss your splash screen?