3

私は自分が何をしているかをよく理解していると思っていましたが、何かをうまく処理しているように感じるときはいつでも、私は間違っていることが証明されています:)

問題のコードはこれです

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);




mButton = (Button)findViewById(R.id.m_button);
mButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    });

    }

私の混乱はnew Intent()andstartActivityメソッドにあります。

私は、匿名クラス内で作業している限り、次のView.OnClickListenerようなことをしなければならないと 想定していましたMainActivity.this.startActivity(intent);

匿名クラスの中にいないときは、簡単に行うことができます new Intent(this,SecondActivity.class);

メソッドを呼び出すことができるのに、インテント パラメータでstartActivity();使用できない理由を誰かが説明できますか?this

4

2 に答える 2

7

匿名内部クラスの場合thisは、匿名クラスそのものです。匿名クラスから外部クラスにアクセスするthisには、行う必要がありますOuterClassName.this

ただし、内部クラスは、外部クラスの変数およびメソッドにアクセスできます。内部クラスが匿名であるかどうかは、まったく違いはありません。

見る:

内部クラスが外部クラスの変数/メソッドにアクセスできると思いましたか?

Java のネストされた内部クラスが外部クラス変数にアクセスする

これは、静的内部クラスと非静的内部クラスの最も重要な違いの 1 つです。

(たとえば)両方のクラスに同じ名前のメソッドがある場合にのみクラス名が必要なので、どちらを意味するかを呼び出します。それが で起こっていることです。this内部クラスと外部クラスの両方にthis- があるため、特に言わない限り、デフォルトで内部クラスになります。

于 2013-12-22T12:14:59.050 に答える
0

内部クラスから new を使用できますIntent(MainActivity.this, AnotherActivity.class)

それthisはあなたの外側の活動であって、内側のクラスではないからです。」this

于 2013-12-22T12:13:43.720 に答える