ความแตกต่างระหว่าง OnClickListener กับ OnClick:
- OnClickListener เป็นอินเทอร์เฟซที่คุณต้องใช้และสามารถตั้งค่าเป็นมุมมองในโค้ดจาวา
- OnClickListener คือสิ่งที่รอให้ใครบางคนคลิกจริงๆโดย onclick จะกำหนดว่าจะเกิดอะไรขึ้นเมื่อมีคนคลิก
- เมื่อเร็ว ๆ นี้ Android ได้เพิ่มแอตทริบิวต์ xml ในมุมมองที่เรียกว่า android: onclick ซึ่งสามารถใช้เพื่อจัดการการคลิกโดยตรงในกิจกรรมของมุมมองโดยไม่จำเป็นต้องใช้อินเทอร์เฟซใด ๆ
- คุณสามารถสลับการใช้งานตัวฟังหนึ่งกับอีกคนหนึ่งได้อย่างง่ายดายหากคุณต้องการ
- OnClickListener ช่วยให้คุณสามารถแยกการกระทำ / พฤติกรรมของเหตุการณ์การคลิกออกจากมุมมองที่ทริกเกอร์เหตุการณ์ แม้ว่าในกรณีง่ายๆนี่ไม่ใช่เรื่องใหญ่สำหรับการจัดการเหตุการณ์ที่ซับซ้อน แต่อาจหมายถึงความสามารถในการอ่านและบำรุงรักษาโค้ดได้ดีขึ้น
- เนื่องจาก OnClickListener เป็นอินเทอร์เฟซคลาสที่ใช้งานจึงมีความยืดหยุ่นในการกำหนดตัวแปรอินสแตนซ์และวิธีการที่ต้องการเพื่อจัดการกับเหตุการณ์ อีกครั้งนี่ไม่ใช่เรื่องใหญ่ในกรณีธรรมดา ๆ แต่สำหรับกรณีที่ซับซ้อนเราไม่ต้องการผสมตัวแปร / วิธีการที่เกี่ยวข้องกับการจัดการเหตุการณ์ด้วยรหัสของ View ที่เรียกเหตุการณ์
- onClick with function binding ใน XML Layout เป็นการผูกระหว่าง onClick กับฟังก์ชันที่จะเรียกใช้ ฟังก์ชันต้องมีอาร์กิวเมนต์เดียว (มุมมอง) เพื่อให้ onClick ทำงานได้
ทั้งสองทำงานในลักษณะเดียวกันเพียงแค่ตั้งค่าผ่านรหัสจาวาและอีกอันผ่านรหัส xml
การติดตั้งโค้ด setOnClickListener:
Button btn = (Button) findViewById(R.id.mybutton);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myFancyMethod(v);
}
});
public void myFancyMethod(View v) {
}
การใช้งาน XML:
<?xml version="1.0" encoding="utf-8"?>
<Button android:id="@+id/mybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:onClick="myFancyMethod" />
ประสิทธิภาพ:
ทั้งสองเหมือนกันในด้านประสิทธิภาพ Xml ถูกแยกวิเคราะห์ล่วงหน้าเป็นรหัสไบนารีขณะคอมไพล์ ดังนั้นจึงไม่มีการ over-head ใน Xml
ข้อ จำกัด :
android: onClick ใช้สำหรับ API ระดับ 4 เป็นต้นไปดังนั้นหากคุณกำหนดเป้าหมาย <1.6 คุณจะไม่สามารถใช้งานได้
onclick
เนื่องจากคุณต้องแน่ใจว่าทุกคลาสใช้วิธีนั้น นี่เป็นการสมมติว่าคุณใช้เค้าโครงมากกว่าหนึ่งครั้ง อย่างไรก็ตามหากคุณต้องมีอินเทอร์เฟซ java เพื่อให้แน่ใจว่าเมธอดอยู่ในคลาสทั้งหมดที่ใช้งานได้คุณก็ไม่ต้องกังวล