2012-09-26 4 views
7

以前のAndroidプログラミングチュートリアル(192ページ)では、LunchList#onOptionsItemSelectedという実装があります。この実装では、Intentの2つがstartActivityに渡されます。一方はコンストラクタがLunchList.thisで、もう一方はコンストラクタがthisに渡されます。Intentコンストラクタに渡されたときに、これをイベントハンドラからClassNameに渡すこととの違いは何ですか?

違いは何ですか?

See lines 78 - 91 hereonOptionsItemSelectedが内部クラス内でどのように宣言されていないかに注意してください。

Android/Javaでは、イベントハンドラやリフレクションによる関数バインディングのコンテキスト内で値thisが変更されますか? Intentの両方のインスタンスを渡すことができますthis

答えて

10

Javaでは、thisは含まれるクラスを指し、ClassName.thisは、名前がClassNameである最初の包含クラスを指します。イベントハンドラは通常、匿名の内部クラスとして記述されるため、イベントハンドラのクラスを含むイベントハンドラのクラスを参照する場合は、ではなくContainingClass.thisを指定する必要があります。

参考:この例ではhttp://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.4

+0

問題のソースへのリンクを追加しました。 'onOptionsItemSelected'は内部クラスの中で宣言されていないことに注意してください。 – ybakos

+1

その場合、クラス名は不要/冗長です。 – JimN

2

あなたはInner Class使用ClassName.this内部Intentを作成する(ここではclassNameがActivityクラス名でなければなりません)、あなたはthisを使用することができますActivityクラス内Intentを作成する場合されています。

+0

問題のソースへのリンクを追加しました。 'onOptionsItemSelected'が内部クラス内で宣言されていないことに注意してください。 – ybakos

+0

' LunchList.this'の代わりに 'this'を使うこともできます。 – Nishant

+0

意味は、この場合に違いはありませんか? – ybakos

1

が、それはのように違いはありませんどちらか同じまま活動を開始するクラスを調整します。インテントの最初のパラメータは、アクティビティが開始されるクラスのコンテキストと、バンドルデータが渡される場所を参照します。

関連する問題