我有一个登录屏幕作为我的第一个活动。它有一个AsyncTask
使用 Web 服务进行登录验证的对象。它加载具有选项卡作为活动的主要活动。然后主要活动加载我的第一个选项卡,该选项卡也有一个AsyncTask
对象来加载一些数据。我想显示从登录验证(onPreExecute
LoginActivity)开始到 FirstActivity 加载其数据(onPostExecute
FirstActivity)的初始屏幕。我已经开始实施它,但我被拒绝了预期的结果。onPostExecute
在LoginActivity之后,初始屏幕消失,登录屏幕重新出现一瞬间。之后,我的 FirstActivity 加载时没有显示初始屏幕。
如何继续在这些活动中显示启动画面?
我知道这听起来很复杂。但是我花了很多时间自己解决这个问题,但我还没有成功。任何形式的帮助表示赞赏。谢谢!
编辑
登录活动:
public Dialog mSplashDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
et1 = (EditText) findViewById(R.id.ev_Login_ID);
et2 = (EditText) findViewById(R.id.ev_Passward);
// Activity Specicfic code
}
protected void showSplashScreen() {
mSplashDialog = new Dialog(this, R.style.SplashScreen);
mSplashDialog.setContentView(R.layout.splashscreen);
mSplashDialog.setCancelable(false);
mSplashDialog.show();
}
public class LoginProcess extends AsyncTask<Object, Void, Void> {
private LoginActivity activity;
private LoginProcess(LoginActivity activity) {
this.activity = activity;
}
/**
* Showing the dialog on the UI thread.
*/
@Override
protected void onPreExecute() {
showSplashScreen();
}
/**
* Performing the heavy lifting in the background thread thread.
*/
@Override
protected Void doInBackground(Object... params) {
try {
// User Validation
}
/**
* When the task is completed, notifiy the Activity.
*/
@Override
protected void onPostExecute(Void unused) {
Intent i = new Intent(LoginActivity.this, MainActivity.class);
i.putExtra("FromOtherTab", true);
startActivity(i);
finish();
}
}
主要活动:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
// create tabs and set current tab to FirstActivity
}
第一活动:
public Dialog mSplashDialog;
private FetchData mTask;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mydashboard);
}
protected void removeSplashScreen() {
if (mSplashDialog != null) {
mSplashDialog.dismiss();
mSplashDialog = null;
}
private class FetchData extends AsyncTask<Object, Void, Void> {
private FirstActivity activity;
/**
* Performing the heavy lifting in the background thread thread.
*/
@Override
protected Void doInBackground(Object... params) {
// Load data
}
/**
* When the task is completed, notifiy the Activity.
*/
@Override
protected void onPostExecute(Void unused) {
// Here I want to call removeSplashScreen();
}
目前,启动屏幕会加载,直到 LoginActivity 线程正在运行。之后,FirstActivity 启动。空白布局出现一秒钟(直到从 FirstActivity 加载数据),然后显示正确的屏幕。我想不断显示启动画面,直到 FirstActivity 的 onPostExecute。如果我在 FirstActivity 中创建一个新的 mSplashDialog,那么我会得到两个单独的启动画面实例。第一个在新的出现之前消失。我不确定如何在 FirstActivity 加载时获得相同的 mSplashDialog 旋转。