ฉันมี ListView พร้อมผู้ฟังสำหรับการคลิกที่ยาวนานและการคลิกปกติ
ทำไมเมื่อฉันกดรายการนาน ๆ เหตุการณ์การคลิกปกติจึงถูกเรียกด้วย?
ฉันจำเป็นต้องมีฟังก์ชั่นสองอย่างแยกกันสำหรับการคลิกที่ต่างกัน
ฉันมี ListView พร้อมผู้ฟังสำหรับการคลิกที่ยาวนานและการคลิกปกติ
ทำไมเมื่อฉันกดรายการนาน ๆ เหตุการณ์การคลิกปกติจึงถูกเรียกด้วย?
ฉันจำเป็นต้องมีฟังก์ชั่นสองอย่างแยกกันสำหรับการคลิกที่ต่างกัน
คำตอบ:
จากผู้ฟังเหตุการณ์ :
onLongClick () - ส่งคืนบูลีนเพื่อระบุว่าคุณได้ใช้งานเหตุการณ์หรือไม่และไม่ควรดำเนินการต่อไป นั่นคือกลับจริงเพื่อระบุว่าคุณได้จัดการเหตุการณ์แล้วและมันควรจะหยุดเพียงแค่นี้ ส่งคืนเท็จหากคุณไม่ได้จัดการและ / หรือเหตุการณ์นั้นควรส่งต่อไปยังผู้ฟังที่คลิกอื่น ๆ
คุณกลับtrue
จากของคุณonLongClick()
และยังคงได้รับเหตุการณ์คลิกตามปกติหรือไม่
แก้ไขเพิ่ม : สำหรับ ListView OnItemLongClickListener
คุณอาจจะใช้ ที่onItemLongClick()
นั่นใช้ค่าส่งคืนบูลีนที่คล้ายกันเพื่อระบุว่าใช้เหตุการณ์หรือไม่
ตอบกลับคำตอบในแง่ที่ง่ายกว่า:
ได้รับ:
@Override
public boolean onLongClick(View view) {
return true; // or false
}
return true
หมายความว่าเหตุการณ์นั้นหมดไป มีการจัดการ จะไม่มีการแจ้งเตือนเหตุการณ์การคลิกอื่น ๆreturn false
หมายถึงไม่ได้ใช้งานกิจกรรม กิจกรรมการคลิกอื่น ๆ จะยังคงได้รับการแจ้งเตือนดังนั้นหากคุณไม่ต้องการonClick
ถูกทริกเกอร์หลังจากเหตุการณ์onLongClick
นั้นคุณควรreturn true
ออกจากonLongClick
เหตุการณ์
ตรวจสอบให้แน่ใจว่าคุณได้ลบล้างวิธีการOnClickListener
ของคุณ onClick
ตรวจสอบให้แน่ใจว่าคุณได้ลบล้างวิธีการOnLongClickListener
ของคุณ onLongClick
และตรวจสอบให้แน่ใจว่าonLongClick
วิธีการของคุณส่งคืนtrue
เนื่องจากจะใช้ไฟล์onClick
.
คุณสามารถใช้setOnLongClickListener
การสร้างอินสแตนซ์ของnew View.OnClickListener()
หรือnew View.OnLongClickListener()
หากคุณสร้างการคลิกแบบยาวและใช้ OnclickListener ตามปกติคุณจะได้รับข้อผิดพลาดนี้จากการเปิดใช้งานวิธีการคลิกเพียงครั้งเดียว คุณควรใช้new View.OnLongClickListener()
เพื่อจับคลิกยาว ๆ เท่านั้น
myListView.setOnItemLongClickListener(this);
public boolean onItemLongClick(...)
ที่นี่คุณเพียงแค่ต้องreturn true
ระบุว่า LongClick ถูกเปิดใช้งานและจะยกเลิกทริกเกอร์ในการคลิกปกติ หากคุณส่งคืนเท็จมันจะทำให้เกิดการคลิกปกติเช่นกัน