ใครบางคนในคำธรรมดาสามารถอธิบายการใช้getViewTypeCount()และgetItemViewType()วิธีการของArrayAdapterฉันได้ไหม
ใครบางคนในคำธรรมดาสามารถอธิบายการใช้getViewTypeCount()และgetItemViewType()วิธีการของArrayAdapterฉันได้ไหม
คำตอบ:
สิ่งเหล่านี้จัดการกับเคสที่คุณต้องการมุมมองประเภทต่างๆสำหรับแถวที่แตกต่างกัน ตัวอย่างเช่นในแอปพลิเคชันผู้ติดต่อคุณอาจต้องการให้แม้แต่แถวมีรูปภาพทางด้านซ้ายและแถวคี่เพื่อให้รูปภาพอยู่ด้านขวา ในกรณีนั้นคุณจะใช้:
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return position % 2;
}
กรอบการใช้ประเภทมุมมองของคุณในการตัดสินใจซึ่งมุมมองที่จะถึงมือคุณทางconvertViewของคุณในgetViewวิธีการ กล่าวอีกนัยหนึ่งในตัวอย่างข้างต้นแถวคู่ของคุณจะได้รับมุมมองการรีไซเคิลที่มีรูปภาพทางด้านซ้ายเพื่อนำมาใช้ซ้ำและแถวคี่จะได้รับเฉพาะรูปภาพที่ด้านขวาเท่านั้น
หากทุกแถวในรายการของคุณมีเค้าโครงเหมือนกันคุณไม่จำเป็นต้องกังวลเกี่ยวกับประเภทมุมมอง ในความเป็นจริงBaseAdapter.javaจัดเตรียมพฤติกรรมเริ่มต้นสำหรับอะแดปเตอร์ทั้งหมด:
public int getItemViewType(int position) {
return 0;
}
public int getViewTypeCount() {
return 1;
}
นี่จะให้ประเภทการดูเหมือนกันสำหรับทุกแถว
แก้ไข - เพื่อร่างการไหลทั่วไป:
AdapterViewอะแดปเตอร์ของคุณAdapterViewพยายามที่จะแสดงรายการที่ผู้ใช้สามารถมองเห็นได้getItemViewTypeแถวnแถวที่กำลังจะแสดงn's ประเภท ไม่พบใด ๆ เนื่องจากยังไม่มีการรีไซเคิลมุมมองgetViewnจะเรียกแถวgetItemViewTypeใช้แถวnเพื่อกำหนดประเภทของมุมมองที่คุณควรใช้getViewและมุมมองแถวของคุณจะปรากฏต่อผู้ใช้ตอนนี้เมื่อมุมมองถูกรีไซเคิลโดยการเลื่อนหน้าจอมันจะเข้าสู่กลุ่มมุมมองการรีไซเคิลที่จัดการโดยกรอบงาน สิ่งเหล่านี้ถูกจัดเรียงตามประเภทมุมมองเพื่อให้มุมมองประเภทที่ถูกต้องมอบให้คุณในconvertViewพารามิเตอร์ในgetViewวิธีการของคุณ:
getItemViewTypeให้แถวที่ต้องการแสดงอีกครั้งconvertViewพารามิเตอร์ในgetViewวิธีการของคุณถ้าเราต้องการแสดงมุมมองประเภทต่าง ๆ ใน list-view มันก็ใช้งานได้ดีgetViewTypeCount()และgetItemViewType()ใน adapter แทนที่จะสลับมุมมองView.GONEและView.VISIBLEอาจเป็นงานที่มีราคาแพงมากgetView()ซึ่งจะมีผลต่อการเลื่อนดูรายการ
โปรดตรวจสอบสิ่งนี้เพื่อการใช้งานgetViewTypeCount()และgetItemViewType()ในอะแดปเตอร์
ลิงก์: the-use-of-getviewtypecount
ดู Outttt !!!!
ฉันต้องเผชิญกับปัญหาในการใช้งานListViewเมื่อวานนี้และมันเป็นมุมมองสองประเภทสำหรับแถวที่มีการวนกลับหลังจากที่ฉันเลื่อนมัน แม้ว่าคำตอบที่ได้รับการโหวตสูงสุดในหัวข้อนี้จะให้คำอธิบายทั่วไปที่ดี แต่ก็ไม่ได้เน้นถึงข้อมูลที่สำคัญที่สุดเพื่อหยุดข้อผิดพลาด UI ด้านบนที่ฉันได้กล่าวถึง
นี่คือคำอธิบายของฉัน:
ทั้งสองgetViewTypeCount()และgetItemViewType()กำลังถูกใช้โดยวิธีการBaseAdapterของgetViewการค้นหาชนิดของมุมมองที่ควรนำมารีไซเคิลและส่งคืน (ตามที่อธิบายไว้ในคำตอบยอดนิยมภายในชุดข้อความ) แต่ถ้าคุณไม่ใช้สองวิธีนี้อย่างเป็นธรรมชาติตามเอกสาร API ของ Android คุณอาจพบปัญหาที่ฉันกล่าวถึง
สรุปแนวทางการดำเนินงาน:
ในการดำเนินการหลายประเภทViewsสำหรับListViewแถวของเราจะต้องเป็นหลักดำเนินการgetItemViewType()และgetViewTypeCount()วิธีการ และgetItemViewType()เอกสารช่วยให้เราทราบดังต่อไปนี้:
หมายเหตุ:จำนวนเต็มจะต้องอยู่ในช่วงที่จะ
0สามารถส่งคืนได้getViewTypeCount() - 1IGNORE_ITEM_VIEW_TYPE
ดังนั้นในตัวคุณgetItemViewType()คุณควรคืนค่าประเภทมุมมองเริ่มจาก 0 ถึงประเภทสุดท้ายเป็น (จำนวนประเภท - 1) ตัวอย่างเช่นสมมติว่าคุณมีมุมมองสามประเภทเท่านั้น ดังนั้นขึ้นอยู่กับวัตถุข้อมูลสำหรับมุมมองคุณสามารถกลับ0หรือ1หรือ2จากgetItemViewType()วิธีการเช่นดัชนีอาร์เรย์ตามศูนย์ และเมื่อคุณใช้มุมมองสามประเภทgetViewTypeCount()วิธีการของคุณจะต้องคืนค่า 3
ไม่ว่าในกรณีใดถ้าคุณคืนค่าจำนวนเต็มอื่น ๆ เช่น 1, 2, 3 หรือ 111, 222, 333 สำหรับวิธีนี้คุณอาจพบข้อผิดพลาด UI ข้างต้นซึ่งคุณเพิ่งวางโดยไม่เชื่อฟัง Android API Doc
หากคุณไม่ได้รับเบาะแสหรือไม่ยังคงแก้ปัญหาและต้องการข้อมูลเพิ่มเติมโปรดอ่านของฉันคำตอบรายละเอียดภายในนี้ StackOverflow Q & A ด้าย
อ่านAndroid Developer Docสำหรับข้อมูลเพิ่มเติมที่คุณอาจพบเบาะแสโดยตรง
หวังว่าคำตอบนี้อาจเป็นประโยชน์กับใครบางคนที่นั่นเพื่อประหยัดเวลาได้มาก !!!
ไชโย !!!
IGNORE_ITEM_VIEW_TYPEฉันมีข้อบกพร่องในหนึ่งใน ListView ของฉัน ฉันใช้ ArrayAdapter เพื่อแทรกมุมมองที่ประกอบด้วย 1 ภาพและ 2 มุมมองข้อความ ฉันมีมุมมองประเภทเดียวเท่านั้น ฉันพยายามที่จะไม่แทนที่วิธี getItemViewType หรือแทนที่โดยการคืนตำแหน่งหรือจำนวนเต็มฮาร์ดโค้ด ในทุกกรณีฉันพบรายการที่ซ้ำกันในรายการของฉันโดยมีพฤติกรรมแปลก ๆ เมื่อเลื่อน (ทำซ้ำการเปลี่ยนแปลง) การกลับมาIGNORE_ITEM_VIEW_TYPEในวิธีการแก้ไขปัญหา ขอบคุณ