วิธีการจำลองการคลิกปุ่มด้วยรหัส?


216

ฉันจะทริกเกอร์เหตุการณ์การคลิกปุ่มโดยใช้รหัสใน Android ได้อย่างไร ฉันต้องการเปิดใช้งานปุ่มคลิกโดยทางโปรแกรมเมื่อมีเหตุการณ์อื่นเกิดขึ้น

ปัญหาเดียวกันฉันกำลังเผชิญ

public void onDateSelectedButtonClick(View v){
    /*Something  Alarm Management 
    http://www.java2s.com/Code/Android/Core-Class/Alarmdemo.htm
    copied code from this site*/
}

รหัสปุ่ม:

<Button
    android:onClick="onDateSelectedButtonClick"
    android:text="Set notification for this date" />

แต่ฉันต้องการเรียกใช้ฟังก์ชันนั้น OnLoadLayout โดยไม่ใช้ OnClickEvent


คุณช่วยระบุปัญหาได้ไหม? ทำไมคุณต้องการที่ คุณต้องการทริกเกอร์บางรหัสให้เรียกใช้งานหรือไม่
Vladimir Ivanov

ใช่ฉันต้องการเรียกใช้รหัสเพื่อให้คลิกปุ่ม
sam

คำตอบ:


445

มีวิธีที่ดีกว่า

View.performClick();

http://developer.android.com/reference/android/view/View.html#performClick ()

สิ่งนี้ควรตอบปัญหาทั้งหมดของคุณ ทุกมุมมองสืบทอดฟังก์ชันนี้รวมถึงปุ่มสปินเนอร์และอื่น ๆ

เพียงเพื่อชี้แจงดูไม่มีวิธีการ performClick () คงที่ คุณต้องโทรไปที่ performClick () ในตัวอย่างของ View ตัวอย่างเช่นคุณโทรไม่ได้

View.performClick();

ให้ทำสิ่งที่ชอบแทน:

View myView = findViewById(R.id.myview);
myView.performClick();

2
แต่ปุ่มย้อนกลับของ View for Android คืออะไร
Peter Ajtai

4
ไม่มี "มุมมอง" สำหรับปุ่มย้อนกลับบนโทรศัพท์ของคุณ คุณต้องใช้ผู้ฟังกุญแจเพื่อกดปุ่มเหล่านั้น นั่นเป็นปัญหาที่แตกต่างกันโดยสิ้นเชิง
moonlightcheese

3
@moon - หากคุณต้องการให้คนได้รับแจ้งความคิดเห็นของคุณให้เริ่มด้วย "@" และตัวอักษรสองสามตัวแรกของผู้ใช้ที่คุณต้องการรับการแจ้งเตือน .... (ผู้เขียนความเห็นในโพสต์จะได้รับการแจ้งเตือนโดยอัตโนมัติ ไม่)
ปีเตอร์ Ajtai

14
รหัสที่แสดงในคำตอบนี้สับสนเล็กน้อย เพียงเพื่อชี้แจงดูไม่มีวิธีการ performClick () คงที่ คุณต้องโทรไปที่ performClick () ในตัวอย่างของ View
Łukasz Wiklendt

3
มันแค่สับสนถ้าคุณไม่รู้ว่าคุณกำลังทำอะไรอยู่
moonlightcheese

52

เพียงเพื่อชี้แจงสิ่งที่ Moonlightcheese ระบุ: ในการทริกเกอร์เหตุการณ์การคลิกปุ่มผ่านรหัสใน Android มีดังต่อไปนี้:

buttonName.performClick();


7

ของ Android callOnClick()( เพิ่มเข้ามาใน API 15 ) performClick()บางครั้งอาจเป็นทางเลือกที่ดีในประสบการณ์ของผมมากกว่า หากผู้ใช้เปิดใช้งานการเลือกเสียงแล้วperformClick()อาจทำให้ผู้ใช้ได้ยินเสียงการเลือกอย่างต่อเนื่องสองเสียงที่ค่อนข้างซ้อนกันอยู่ด้านบนซึ่งสามารถสั่นสะเทือนได้ (เสียงตัวเลือกหนึ่งสำหรับการคลิกปุ่มแรกของผู้ใช้จากนั้นอีกเสียงหนึ่งสำหรับปุ่มอื่น ๆOnClickListenerที่คุณกำลังโทรหาผ่านรหัส)


7

เพียงเขียนโค้ดบรรทัดง่าย ๆ นี้: -

button.performClick();

โดยที่ button เป็นตัวแปรอ้างอิงของคลาส Button และกำหนดไว้ดังนี้: -

private Button buttonToday ;
buttonToday = (Button) findViewById(R.id.buttonToday);

แค่นั้นแหละ.


6

เริ่มต้นด้วย API15 คุณสามารถใช้callOnClick()โดยตรงที่เรียกว่ามุมมองที่แนบมา OnClickListener ซึ่งแตกต่างจาก performClick () สิ่งนี้จะเรียกผู้ฟังเท่านั้นและจะไม่ทำการคลิกใด ๆ ที่เกี่ยวข้องเช่นการรายงานเหตุการณ์การเข้าถึง


4

หากคุณไม่ได้ใช้senderเหตุผลทำไมไม่ refactor การดำเนินการจัดการปุ่มเพื่อแยกฟังก์ชั่นและเรียกมันได้จากทุกที่ที่คุณต้องการ (จากตัวจัดการปุ่มและจากที่อื่น)

อย่างไรก็ตามมันเป็นการออกแบบที่ดีกว่าและสะอาดกว่า - รหัสที่จำเป็นต้องเรียกใช้บนตัวจัดการปุ่มและจากที่อื่น ๆ สมควรที่จะได้รับการปรับสภาพให้เป็นฟังก์ชันของตัวเอง นอกจากนี้ยังช่วยให้คุณแยกการจัดการ UI ออกจากรหัสแอปพลิเคชันตรรกะ คุณจะมีชื่อที่ดีในฟังก์ชั่นไม่ใช่เพียงแค่วันที่ SelectButtonClick ()

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.