0

Android アプリの最初のアクティビティである「ランチャー アクティビティ」は、すぐに終了します。目標は、共有設定変数の値に応じて、MainActivity または UserLoginActivity にリダイレクトすることです。

この変数が存在しない場合、MainActivity に対して StartActivity が自動的に実行されます。この変数が設定されている場合、ユーザーを認証するために、API に対して HTTP 要求を実行します。次に、MainActivity を開始します。通常、HTTP 要求にかかる時間は 1 秒未満です。

問題は、LauncherActivity の中央にプログレス バーを表示して、何かが読み込まれていることをユーザーが理解できるようにしたいということです。問題は、画面に何も表示されないことです。しかし、アクティビティを開始する行にコメントを付けると、それが表示されます...アクティビティの期間が速すぎて何も表示できないようです!

setContentView() メソッドを呼び出すと、ビューが画面に即座にロードされると思いました。私のケースは正常な動作ですか? アクティビティが約 1 秒続くことがわかっている場合、画面に進行状況バーを表示するにはどうすればよいですか?

ここで私のランチャー アクティビティを確認できます

public class Launcher extends Activity {

    private void goToUserLogin(){

        Intent intent;

        intent = new Intent(this, UserLoginActivity.class);
        startActivity(intent);
        finish();
    }

    private void goToMain(){

        YokiAPI API = new YokiAPI(this);
        Intent      intent;

        try {
            if (API.authenticateSmart(YokiGlobals.preferences.getSavedUserId(this))) {
                intent = new Intent(this, MainActivity.class);
                startActivity(intent);
                finish();
            } else {
                this.goToUserLogin();
            }
       } catch (Exception e){}
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_launcher);

        // Launch Demo if First Run
        if (YokiGlobals.preferences.getFirstLaunch(this)){
            YokiGlobals.preferences.updateFirstLaunch(false, this);
            this.launchDemo();
        }


        /*
        ** If userId saved, smart Auth and go to Main
        ** Else go to User Login for Full Auth or register
         */

        if (YokiGlobals.preferences.getSavedUserId(this) == null){
            this.goToUserLogin();
        }
        else {
            this.goToMain();
        }
    }
}

そして、.xml リソース ファイル

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="THIS TEXT WONT APPEAR"
        android:layout_marginTop="208dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

ありがとう、オスカー

4

2 に答える 2

0

setContentView() メソッドを呼び出すと、画面にビューが即座にロードされると思いました

いいえ、あなたはまだにいるので、そうではありませんonCreate()。UI を表示したい場合は、アクティビティ サイクルをさらに進める必要があるため、コードを作り直すか、認証を別のアクティビティに移動します。

PS:this.本当の理由なしに使用します。

于 2015-05-16T19:57:54.477 に答える