24

アクティビティに含まれる UI コントロールが多すぎます。アクティビティを可視化してからメソッドを実行したい。

私が試した例:

public class Main extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
             MyMethod();
    }

    private void MyMethod(){
        Toast.makeText(this, "Hi UI is fully loaded", Toast.LENGTH_SHORT).show();
    }
}

ただし、上記のサンプルでは、​​アクティビティが表示される前にメッセージが表示されます。

アクティビティが完全に表示されているかどうかを確認する方法はありますか?

4

5 に答える 5

32

コードを次の場所に移動しますonResume

@Override
protected void onResume()
{
    super.onResume();
    MyMethod();
}

アクティビティのライフサイクルを確認する

http://developer.android.com/reference/android/app/Activity.html

protected void onResume ()

アクティビティがユーザーとの対話を開始するために、onRestoreInstanceState(Bundle)、onRestart()、または onPause() の後に呼び出されます。これは、アニメーションを開始したり、排他アクセス デバイス (カメラなど) を開いたりするのに適した場所です。

onResume は、アクティビティがユーザーに表示されることを示す最良の指標ではないことに注意してください。キーガードなどのシステムウィンドウが前面にある場合があります。onWindowFocusChanged(boolean) を使用して、アクティビティがユーザーに表示されていることを確認します (たとえば、ゲームを再開するため)。

派生クラスは、このメソッドのスーパー クラスの実装を呼び出す必要があります。そうでない場合は、例外がスローされます。

于 2013-10-11T07:06:00.607 に答える
9

コードを onAttachedToWindow() に移動します

@Override
public void onAttachedToWindow() {
   super.onAttachedToWindow();
   Toast.makeText(this, "Hi UI is fully loaded", Toast.LENGTH_SHORT).show();
}
于 2013-10-11T07:15:44.603 に答える
6

コードを に移動しますonResume

初めて作成されたときを含め、アクティビティがフォアグラウンドになるたびに、システムはこのメソッドを呼び出します。アクティビティの一時停止と再開の詳細を読む

@Override
protected void onResume() {
    super.onResume();

    MyMethod();
}

詳細については、Android アクティビティのライフ サイクルを参照してください。これらのメソッドは何のためにあるのでしょうか。

于 2013-10-11T07:05:13.463 に答える
3

アクティビティが表示されたときに呼び出される実際のコールバックはありません。しかし、添付の図でわかるように、onResume()アクティビティが表示される必要があるときにメソッドが呼び出されます。

また、アクティビティのライフサイクルとドキュメントをご覧くださいHERE

したがって、メソッドは次のように呼び出す必要があります。

@Override
public void onResume() {
    super.onResume();
     MyMethod();
}

ダイアグラム Android

于 2013-10-11T07:08:29.807 に答える
2

アクティビティMyMethod()の呼び出しonResume()

ドキュメントに従ってonResume()、アクティビティがユーザーとの対話を開始するときに呼び出されます。この時点で、アクティビティはアクティビティ スタックの一番上にあり、ユーザー入力がそこに送られます。

protected void onResume() {
   super.onResume();
   MyMethod();
}
于 2013-10-11T07:06:13.103 に答える