2012-05-13 8 views
1

を作成するときに、「この」キーワードを使用して、私は次のJavaコードを持っている:のEventHandler

public class FirstActivity extends Activity implements OnClickListener 
{ 

    Button btn; 
    TextView textview; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     textview = (TextView)findViewById(R.id.textView2); 
     btn = (Button)findViewById(R.id.BtnGoToSecondActivity); 
     btn.setOnClickListener(this); 
    } 

    public void onClick(View v) 
    { 
     Intent secondActivityIntent = new Intent(this, SecondActivity.class); 
     secondActivityIntent.putExtra("Name", textview.getText()); 
     startActivity(secondActivityIntent); 
    } 
} 

私は上記の例では「この」キーワードにヒットするまでのコードの各ビットが理にかなっています。 "setOnClickListener()"メソッド呼び出しで引数として使用されている "this"キーワードの周りに頭を浮かべることはできません。 私は上記の使用されたクラスのインスタンスを作成していません。存在しないインスタンスをどのように参照できますか?インスタンスは自動的に作成されますか?

(私は「これ」キーワードが何であるかを知っていて、それが何をするかが、この場合には、私はロジックが表示されない)

+0

まだ検索していますか?または助けが必要ですか?必要ならばhttp://chat.stackoverflow.com/rooms/10629/agarwalに参加してください –

答えて

2

、このコード行: - (クラスはそれが属することを考えるとFirstActivity

btn.setOnClickListener(this); 

は...ボタンのイベントリスナーは、あなたが現在している同じインスタンスであると述べて)はOnClickListenerインターフェイスを実装しています。

はい、です。このメソッドを呼び出すとインスタンスが既に作成されています。そうしないと、そのメソッドをまったく呼び出すことができなくなります。 onCreate()メソッドを呼び出すときに 現在のインスタンスに引数として渡されています。

1

あなたのクラスには、方法内部OnClickListenerインタフェースを実装しFirstActivity、ありますFirstActivity、 "this"は、メソッドが実行されるFirstActivityクラスのインスタンスへの参照です(Androidがアクティビティを実行するときに、このクラスのインスタンスが作成されます)。

FirstActivityもOnClickListenerであるため、FirstActivityクラスのインスタンスをsetOnClickListenerメソッドに渡します。

3

「インスタンスが自動的に作成されていますか?その答えは、効果的には、はいです。あなたのアプリケーションで、このアクティビティクラスのインスタンスです。インスタンスはフレームワークによって作成され、さまざまなイベントを処理するためにフレームワークによって使用されます。基本的には

2

onCreate()のような非静的メソッドを実行している場合、オブジェクトが明らかに存在します。 ActivityオブジェクトはAndroidによって呼び出されます(そのため、マニフェストにActivityオブジェクトを含める必要があります)。