ฉันเห็นวิธีการเหล่านี้เป็นวิธีที่สะอาดกว่าในการเข้าถึงข้อมูลรายการของฉัน แทนโดยตรงของการเข้าถึงวัตถุอะแดปเตอร์ของฉันผ่านทางบางอย่างเช่นฉันก็สามารถเรียกเช่นอะแดปเตอร์myListData.get(position)adapter.get(position)
getItemIdเดียวกันจะไปสำหรับ โดยปกติฉันจะใช้วิธีนี้เมื่อฉันต้องการที่จะดำเนินการบางอย่างขึ้นอยู่กับ ID ที่ไม่ซ้ำกันของวัตถุในรายการ สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อทำงานกับฐานข้อมูล ที่ส่งคืนidอาจเป็นการอ้างอิงถึงวัตถุในฐานข้อมูลซึ่งฉันสามารถดำเนินการที่แตกต่างกันใน (update / delete / etc)
ดังนั้นแทนที่จะเข้าถึง ID จากวัตถุข้อมูลดิบอย่างที่myListData.get(position).getId()คุณสามารถadapter.getItemId(position)ใช้ได้
ตัวอย่างหนึ่งของการที่ฉันรู้สึกเหมือนฉันจำเป็นต้องใช้วิธีการเหล่านี้อยู่ในโครงการโดยใช้SeparatedListViewAdapter อะแดปเตอร์นี้สามารถมีอะแดปเตอร์หลายประเภทแต่ละตัวแทนข้อมูลที่เป็นประเภทที่แตกต่างกัน (โดยทั่วไป) เมื่อโทรgetItem(position)บนSeparatedListViewAdapterวัตถุที่ส่งกลับอาจจะแตกต่างกันขึ้นอยู่กับที่ "ส่วนตำแหน่ง" คือการที่คุณส่ง
ตัวอย่างเช่นหากคุณมี 2 ส่วนในรายการของคุณ (ผลไม้และขนม): หากคุณใช้getItem(position)และpositionเกิดขึ้นกับรายการในส่วนผลไม้คุณจะได้รับวัตถุที่แตกต่างจากที่คุณร้องขอgetItem(position)โดยpositionชี้ไปที่รายการในลูกอมมาตรา. จากนั้นคุณอาจคืนค่า ID คงgetItemId(position)ที่ซึ่งแสดงถึงชนิดของข้อมูลที่getItem(position)ส่งคืนหรือใช้instanceofเพื่อกำหนดวัตถุที่คุณมี
นอกเหนือจากที่ฉันพูดไปฉันไม่เคยรู้สึกเหมือนฉันต้องการใช้วิธีการเหล่านี้จริงๆ
getItemId()ในArrayAdapter()เสมอกลับมา-1พร้อมกับassert false : "TODO"; return -1;