在onClick(View v)方法中接受此关键字

时间:2014-07-31 12:37:16

标签: java android interface

我是 Android 环境的新用户我只是想知道如果所需参数的类型为{{OnClick(View v)this方法为何会接受View 1}}和我的方法扩展ActivityViewActivity之间是否存在关系?请参阅代码以使问题更清楚。

...
public class MainActivity extends Activity implements OnClickListener {

    private Button btn1;
    private Button btn2;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        ...
        btn1 = (Button)findViewById(R.id.button1);
        btn2 = (Button)findViewById(R.id.button2);

        // Below are the methods calling which confuses me
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        ...
    }

    public void onClick(View v) {
        int id = v.get();
        switch(id) {
            case R.id.button1:
                //statement for button1
            case R.id.button2:
                //statement for button2
        ...
        }
    }
}

编辑:这个问题具有误导性,只是因为忽略了setOnClickListener(...)'与' onClick(...)'相同。我只是不知道如何关闭这个问题。

3 个答案:

答案 0 :(得分:2)

看,

首先了解这两行

View.OnClickListener - Interface definition for a callback to be invoked when a view is clicked.
onClick() - Called when a view has been clicked.

现在,
您的活动实施OnClickListener

  

   public class MainActivity extends Activity implements OnClickListener{}
  

所以当你实现它时......有一个方法自动实现到类,称为onClick()

因此,当您将this关键字传递给任意视图的onClickListener时。这意味着您实际上正在调用onClick()方法..

btn1.setOnClickListener(this); //calling onClick() method for button1
btn2.setOnClickListener(this); //calling onClick() method for button2
onClick()方法中的


你只需找到你的ID并编写你想要对视图做什么的代码..

public void onClick(View v){
int id=v.get(); // getting ID of Clicked View

switch(id){

case R.id.button1:
    //called when you press button 1
    //write your code 
    break;
case R.id.button2:
    //called when you press button 2
    //write your code 
    break;
...
}

有关onClickListener()的详细信息,请访问此网站/博客 https://stand2code.blogspot.in/2016/12/multiple-buttons-onclicklistener-android.html

答案 1 :(得分:0)

您正在推广Activity,但您正在实施OnClickListener,而onClick()OnClickListener接口的方法。因此您必须实施其onClick class中的方法因此this没有引起任何冲突。请参阅此内容以了解接口Is there more to an interface than having the correct methods

答案 2 :(得分:0)

setOnClickListenerOnClickListener个实例作为参数,OnClickListener是一个内容为onClick()方法的界面。

当您在此处传递setOnClickListener(this);当前上下文时,该参数必须是实现OnClickListener接口的某个对象的实例

有关详细信息,请参阅:Android - How to set a named method in button.setOnClickListener()