7

OnCreate()アクティビティの開始時に が 1 回だけ呼び出されるのはなぜですか?

OnCreate()同じアクティビティで複数回呼び出すことはできますか?

はいの場合、どのように呼び出すことができますか? 誰でも例を挙げることができますか?

どうもありがとう!!!

4

7 に答える 7

6

なぜもう一度呼びたいのですか?アクティビティが再構築されない限り、システムによって呼び出されます。OnCreate を手動で呼び出すことはできません。setContentView() を 2 回呼び出さないのと同じ理由です。ドキュメントとして:

onCreate(Bundle) は、アクティビティを初期化する場所です。最も重要なことは、ここでは通常、UI を定義するレイアウト リソースで setContentView(int) を呼び出し、findViewById(int) を使用して、プログラムで操作する必要があるその UI 内のウィジェットを取得することです。ウィジェットの初期化が完了したら、なぜそうするのですか?

更新 私はいくつかの言葉を取り戻します。これは手動で行うことができますが、なぜこれが呼び出されるのかまだわかりません。Fragmentsを試しましたか?
サンプルコード:

public class MainActivity extends Activity implements OnClickListener {
        private Button btPost;
        private Bundle state;
        private int counter = 0;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            state = savedInstanceState;
            btPost = (Button) findViewById(R.id.btPost);
            btPost.setOnClickListener(this);
            Toast.makeText(getBaseContext(), " " + counter, Toast.LENGTH_LONG)
                    .show();
        }

        @Override
        public void onClick(View v) {
            counter++;
            this.onCreate(state);
        }
    }
于 2012-12-20T03:44:53.637 に答える
1

onCreateを手動で呼び出したい場所。

次に、これを実行します。

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

finish()は現在のものを呼び出します。

そして、このアクティビティでgetExtraを実行している場合は、これを実行します。

@Override
    protected void onSaveInstanceState(Bundle outState) {

            outState.putString("key",your_variable);
        super.onSaveInstanceState(outState);

    }

そしてこれをonCreate()に追加します

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
if(savedInstanceState != null)
        {
            your_variable= savedInstanceState.getString("key"); 
        }
}
于 2012-12-20T04:01:22.440 に答える
1

onCreate()メソッドは、アクティビティの全期間で 1 回だけ発生する基本的なアプリケーション起動ロジックを実行します。onCreate()の実行が完了すると、システムはonStart( ) メソッドとonResume()メソッドを立て続けに呼び出します。

初期化プロセスconsumes lot of resourcesとこれを回避するために、一度作成されたアクティビティは完全に破棄されることはありませんが、バックグラウンドでユーザーに表示されないままになるため、一度前面に戻されると、再初期化は行われません。

于 2012-12-20T03:49:37.310 に答える
0

@OnCreateは最初の作成専用であるため、1回だけ呼び出す必要があります。

複数回完了したい処理がある場合は、他の場所、おそらく@OnResumeメソッドに配置する必要があります。

于 2012-12-20T04:01:41.007 に答える
0

OnCreateは基本的に、アクティビティ(UI)を作成するために使用されます。アクティビティをすでに作成している場合は、すでに作成しているので、再度作成する必要はありません。

これは基本的に、アクティビティを初期化し、アクティビティのユーザーインターフェイスを作成するために使用されます。アクティビティは、何度でも使用できる視覚的な部分です。問題は、アクティビティを再作成することではなく、アクティビティのすべてのコンポーネントを再初期化することだと思います。そのために、メソッドinitialize_act()を作成し、どこからでも呼び出すことができます...

于 2012-12-20T03:51:16.707 に答える
0

なぜ何度も電話したいonCreateのですか?アクティビティを再作成します。何らかの理由でこれが必要な場合は、アクティビティを終了し、 を使用しintentてそのアクティビティの新しいインスタンスを作成します。それ以外の場合は、アクティビティの 2 つのインスタンスが同時に存在します。それが役に立てば幸いですが、それが意味をなさない場合は、必要なものに関する情報を追加して、コンテキストを取得してください

于 2012-12-20T03:44:31.423 に答える
0

最近、画面の向きが変わるたびに onCreate が呼び出されることに気付きました (横向き/縦向き)。初期化プロセスを計画する際には、この点に注意する必要があります。再作成は、AndroidManifest.xml で抑制できます。

<activity
            android:configChanges="keyboardHidden|orientation"
            android:name=".testActivity"
            android:label="@string/app_name"></activity>
于 2016-03-26T22:18:44.383 に答える