0

最初のアクティビティとしてログイン画面があります。AsyncTaskWeb サービスを利用したログイン認証用のオブジェクトを持っています。アクティビティとしてタブを持つメイン アクティビティをロードします。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 を回転させる方法がわかりません。

4

2 に答える 2

0

Why don't you load the splashscreen from onPreExecute of your asynctask, then close it onPostExecute (as you are currently doing)

于 2012-07-16T13:39:16.673 に答える
0

私があなただったら、. なしでスプラッシュ スクリーンを作成しますAsyncTask。そこからAsyncTask、スプラッシュ スクリーンが表示されている間に読み込まれる を作成します。ではonPostExecute、スプラッシュ スクリーンから次のアクティビティに移動します。基本的に、すべてのバックグラウンド アクティビティを に配置しAsyncTask、スプラッシュ スクリーンをメイン UI スレッドで実行すれば問題ありません。スプラッシュ スクリーン アクティビティ内で を起動するだけでAsyncTaskonPostExecuteスプラッシュ アクティビティからメイン アクティビティに移動します。

それが理にかなっていることを願っています。ここに役立つ素晴らしいリンクがありますAsyncTask

www.peachpit.com/articles/article.aspx?p=1823692&seqNum=3

頑張ってください!

于 2012-07-13T16:53:18.523 に答える