最初のアクティビティとしてログイン画面があります。AsyncTask
Web サービスを利用したログイン認証用のオブジェクトを持っています。アクティビティとしてタブを持つメイン アクティビティをロードします。AsyncTask
メイン アクティビティは、いくつかのデータを読み込むオブジェクトもある最初のタブを読み込みます。onPreExecute
ログイン検証の開始 ( LoginActivity) から FirstActivity がそのデータ ( FirstActivity) をロードするまで、スプラッシュ スクリーンを表示したいと考えていますonPostExecute
。実装を開始しましたが、望ましい結果が得られませんでした。LoginActivityの後にスプラッシュ画面が消えonPostExecute
、ログイン画面が一瞬再表示されます。その後、スプラッシュ画面を表示せずに 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 が開始されます。空白のレイアウトが 1 秒間表示され (FirstActivity からのデータが読み込まれるまで)、適切な画面が表示されます。FirstActivity の onPostExecute までスプラッシュ画面を表示し続けたい。FirstActivity で新しい mSplashDialog を作成すると、スプラッシュスクリーンの 2 つの別個のインスタンスが得られます。最初は、新しいものが現れる直前に消えます。FirstActivity の読み込み時に同じ mSplashDialog を回転させる方法がわかりません。