7

Android(API 14〜16を対象とする)では、MainActivityとがありNextActivityます。メソッドが:のブロック内で呼び出された場合、インテントを使用して内部から開始することは困難ではありませんNextActivityMainActivitygetIntent()onCreate()NextActivity

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        int data = 7;
        ...
        Intent intent = new Intent(this, NextActivity.class);
        intent.putExtra("data", data);
        startActivity(intent);
        }
    }

public class NextActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final int data = this.getIntent().getIntExtra("data", 7);
        ...
        }
    ...
    }

ただし、このフィールドdataはの匿名(「内部」)クラス内で使用されているためNextActivity、宣言する必要がありfinalます。

フィールドを宣言したくないfinalので、クラスの最初、開始前に宣言すれば、通常は宣言しないようにできonCreate()ます。ただし、何らかの理由で、ステートメントが(キーワードなしで)の外に表示さNextActivityれると、起動時にアプリがクラッシュします。getIntent()finalonCreate()

なぜですか?

4

2 に答える 2

10

getIntent()以前はできませんでしたonCreate()-Intentその時点で利用できるものはまったくありません. を必要とするものすべてに同じことが当てはまると思いますContext

ただし、匿名の内部クラスは引き続き を呼び出すことができるgetIntent()ため、これを変数として宣言する必要はまったくありません。

于 2012-12-21T04:44:00.113 に答える
1

あなたの質問によると、私が理解しているのは、次のアクティビティでデータを最終として宣言したくないということです..それなら、これを試すことはできません./

public class NextActivity extends Activity {
    int data=0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         data = this.getIntent().getIntExtra("data", 7);
        ...
        }
    ...
    }

これを試して...

于 2012-12-21T04:35:24.720 に答える