0

はじめに:他のアクティビティを拡張するベース アクティビティを作成しました。関数本体でランナブルを使用していくつかのメソッドをオーバーライドしました。次に例を示します。

@Override
    protected void onStop(){
        new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                BaseActivity.super.onStop();
            }
        }, Fade.fadeDuration);
    }

ただし、アプリを実行しようとすると SuperNotCalledException が発生します。ランナブルから super.onStop() を取り出すと、例外はまったく発生しません。

質問: SuperNotCalledException を発生させずに、ベース アクティビティのランナブルから super.onStop を呼び出すにはどうすればよいですか?

追加情報:特定のビューのみをフェードアウトするフェードアウト アニメーションを追加しようとしています。これには約 700 ミリ秒かかるため、onStop も 700 ミリ秒遅らせる必要があります。問題は、これをすべてのアクティビティでコーディングするのが面倒なことです。すべてのアクティビティでフェードアウトを心配する必要がないように、ベース アクティビティを作成したい。

4

1 に答える 1

0

単純に の実行を遅らせようとしている場合は、super.onStopを使用しCountDownLatchます。

多分このようなもの:

private void CountDownLatch latch;
private void long latchWait = 10L; // seconds 
private void TimeUnit latchWaitUnit = SECONDS;

@Override
protected void onStop(){
   try{
       this.latch.await(this.latchWait, this.latchWaitUnit);
   catch(InterruptedException e){
       // Handle
   }finally{
       super.onStop();
   }
}

public void startLatch(long wait){
    this.latch = new CountDownLatch(1);
    this.latchWait = wait;
}

public void releaseLatch(){
   this.latch.countDown()
}

このコードはテストしていません。

于 2013-04-20T11:43:56.923 に答える