2011-02-10 108 views
2

我是新来的Java与C家庭背景。 我无法剖析此代码。如果你能帮助我通过识别什么是内部类和接口在此块:传递给OnClickListener()的参数是什么?

startButton.setOnClickListener(new View.OnClickListener(){ 
        public void onClick(View view) 
        {         
                              
        usrnameobj = (EditText)findViewById(R.id.et_usename); 
           usrpassobj = (EditText)findViewById(R.id.et_password); 
        String username = usrnameobj.getText().toString(); 
        String password = usrpassobj.getText().toString(); 
        
        Intent i=new Intent(getApplicationContext(),AndroidXmlResource.class); 
        i.putExtra("entry",username.toString() + password.toString()); 
        startActivityForResult(i,REQ_CODE); 
      
        }   
       }); 

我只能想象高达:

startButton.setOnClickListener(new View.OnClickListener());

但之间没有{}

+0

我不会说这是一个很好的问题,但它是一个可爱的问题.... –

+0

对于习惯于在将它们作为参数传递之前创建对象的人来说不可爱: – chunkyguy

回答

2

OnClickListener是一个接口定义到视图。想象一下这样的:

class View 
{ 
    static interface OnClickListener 
    { 
     public void onClick(View v); 
    } 
} 

之间{事情}是OnClickListener接口的方法onClick(View)的实施。 ()开始new...之间的东西被称为匿名内部类。您可能会发现更多解释here

干杯!

0

的提到的示例代码包含一个匿名内部类。

这里的用户名&正在提取密码数据&下一个活动正在被用户点击开始按钮时被调用。

请查看以下网址:

http://www.remwebdevelopment.com/dev/a69/Different-Ways-To-Handle-Clicks.html

请回复任何澄清

2

它创建一个实现了View.OnClickListener接口的匿名类。当你需要接收和处理View上的点击时,你会这样做,但不希望为这个简单的过程创建一个正式的类(你最终会得到很多这样的类)。

检查出this匿名类的解释。

+0

谢谢!我想我需要阅读很多关于这个:) – chunkyguy

2

发送的内容有一个匿名类,您可以创建一个单独的类来实现OnClickListener并创建该类的实例并将其作为参数发送给setOnClickListener。

“public void onClick(View view)”是需要重写的函数,当您点击setOnClickListener的类时会调用这个函数。因此,在这种情况下,它会从表单中提取密码和用户名,并启动意向集的活动。

1

setOnClickListener方法将新的View.OnClickListener()实例作为参数,大括号内发生的事情正在重写该类的onClick()方法。我认为你可以轻松剖析onClick()方法。

0

你可以做 要么

btn.setOnClickListener(this); 

接着出来的onCreate()做

public void onClick(View v) { 
    switch(v.getId()) { 

    case R.id.Button: 
     //do what you like to do 
     break; 
    } 
} 

btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


          // do what you like to do 
     } 

}); 
相关问题