ฉันมี 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 ถูกเปิดใช้งานและจะยกเลิกทริกเกอร์ในการคลิกปกติ หากคุณส่งคืนเท็จมันจะทำให้เกิดการคลิกปกติเช่นกัน