2012-05-13 47 views
1

我有以下的Java代码:使用“this”关键字创建事件处理程序时

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”关键字。 我还没有创建任何上面使用的类的实例。我怎样才能引用一个不存在的实例?实例是否自动创建?

(我知道了“this”关键字是什么和它做什么,但在这种情况下,我没有看到逻辑)

+0

仍在搜索?或需要任何帮助?如果需要帮助加入http://chat.stackoverflow.com/rooms/10629/agarwal –

回答

2

基本上,这行代码:

btn.setOnClickListener(this); 

...是说明该事件侦听器的按钮,是你目前所在的同一个实例 - 鉴于类属于(FirstActivity )实现了接口OnClickListener

是的,当您调用此方法时已创建一个实例,否则您根本无法调用该方法!您恰好在调用onCreate()方法时作为参数传递给setOnClickListener当前的实例。

1

你的类是FirstActivity,它实现OnClickListener接口,方法内FirstActivity,“this”是对运行方法的FirstActivity类的实例的引用。(当Android运行该活动时,它创建该类的一个实例)。

由于FirstActivity也是一个OnClickListener,因此您将FirstActivity类的实例传递给setOnClickListener方法。

3

您问“实例是否自动创建?”对此的答案实际上是的。您的应用程序此Activity类的一个实例;该实例由框架创建并由框架用于处理各种事件。

2

如果你正在执行像onCreate()这样的非静态方法,那么该对象显然存在。您的Activity对象由Android调用(这就是为什么您必须将其包含在清单中)。

相关问题