1

スプラッシュスクリーンアニメーションを使用してアプリを作成しています。アニメーションをキャンセルするオプションをユーザーに提供しました。

ホーム画面(ホーム)にはTextView(テレビ)があります。onCreate()の間に、そして再びonResume()の間にテキストを設定しました。

アニメーションで実行する場合のフローは、スプラッシュ画面->ホーム画面->その他のアクティビティです。テレビのテキストが設定され、ホーム画面に戻ると「リロード」され、別のテキストが設定されます。

アニメーションがキャンセルされると、ホーム画面から始まります:ホーム画面->その他のアクティビティ。

問題:アニメーションがキャンセルされると、ホーム画面はonCreate()中にtv2にテキストを設定し、次にonResume()にもう一度設定します。これを防ぐために「if」句を追加しました。

ここにコードがあります:

public class Home extends Activity {
    public static boolean reload = true;
    EditText tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    tv= (EditText) findViewById(R.id.textViewFact);
    tv.setText(updateText()); 
    MORE STUFF ....
}

ユーザーがアニメーションをキャンセルすることを選択した場合、「リロード」は別のアクティビティからfalseに設定されます。

そして今onResumeのために:

public void onResume(){
    super.onResume();
    Log.i("test", "home activity before if: " + Home.reload);

    if(!reload){
        Log.i("test", "home activity inside if: " + Home.reload);

        return;
    }
    else{
        Log.i("test", "home activity inside else: " + Home.reload);

        tv.setText(updateText()); 
    }
}

ご覧のとおり、updateText()はonCreate()とonResume()で実行されますが、reloadがfalseの場合(次のlogcat出力で確認できるように)、updateText(を実行しないでください。 ) また。

01-30 08:44:50.140: I/test(551): home activity before if: false
01-30 08:44:50.140: I/test(551): home activity inside if: false
01-30 08:44:51.170: I/test(551): home activity before if: false
01-30 08:44:51.170: I/test(551): home activity inside if: false

なぜonResume()TWICE(ログ出力による)に入っているのか、それがELSE句内にある場合にupdateText()関数を実行しているのかはわかりません。ログ出力によると、tに達しました。

4

2 に答える 2

1

ホーム画面を呼び出したアクティビティが適切に終了せず、実際にホームアクティビティを2回呼び出したため、onResume()からではなくonCreate()からupdateText()が再度呼び出されていたことがわかりました。

よろしくお願いします。

于 2013-01-30T09:02:22.030 に答える
0

リロードフラグを設定に入れて更新し、使用する前に設定からフェッチすることをお勧めします...

于 2013-01-30T07:40:09.740 に答える