1

次の Java コードがあります。

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);
    }
}

上記の例で "this" キーワードに到達するまでは、すべてのコードが意味を成します。「setOnClickListener()」メソッド呼び出しで引数として使用される「this」キーワードについて理解できません。上記で使用したクラスのインスタンスを作成していません。存在しないインスタンスを参照するにはどうすればよいですか? インスタンスは自動的に作成されますか?

(「this」キーワードが何であるか、それが何をするかは知っていますが、この場合、ロジックはわかりません)

4

4 に答える 4

3

「インスタンスは自動的に作成されますか?」と尋ねました。その答えは事実上、イエスです。アプリケーションこの Activity クラスのインスタンスです。インスタンスはフレームワークによって作成され、さまざまなイベントを処理するためにフレームワークによって使用されます。

于 2012-05-13T00:47:24.493 に答える
2

基本的に、このコード行:

btn.setOnClickListener(this);

... は、ボタンのイベント リスナーが、現在使用しているインスタンスと同じであることを示しています。これが属するクラス ( FirstActivity) がインターフェイスを実装しているとしOnClickListenerます。

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

于 2012-05-13T00:48:29.580 に答える
2

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

于 2012-05-13T00:50:29.343 に答える
1

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

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

于 2012-05-13T00:47:12.163 に答える