How exactly does the android:onClick XML attribute differ from setOnClickListener?

后端 未结 17 2168
野趣味
野趣味 2020-11-21 11:50

From that I\'ve read you can assign a onClick handler to a button in two ways.

Using the android:onClick XML attribute where you just use t

17条回答
  •  無奈伤痛
    2020-11-21 12:07

    No, that is not possible via code. Android just implements the OnClickListener for you when you define the android:onClick="someMethod" attribute.

    Those two code snippets are equal, just implemented in two different ways.

    Code Implementation

    Button btn = (Button) findViewById(R.id.mybutton);
    
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myFancyMethod(v);
        }
    });
    
    // some more code
    
    public void myFancyMethod(View v) {
        // does something very interesting
    }
    

    Above is a code implementation of an OnClickListener. And this is the XML implementation.

    XML Implementation

    
    
    

    In the background, Android does nothing else than the Java code, calling your method on a click event.

    Note that with the XML above, Android will look for the onClick method myFancyMethod() only in the current Activity. This is important to remember if you are using fragments, since even if you add the XML above using a fragment, Android will not look for the onClick method in the .java file of the fragment used to add the XML.

    Another important thing I noticed. You mentioned you don't prefer anonymous methods. You meant to say you don't like anonymous classes.

提交回复
热议问题