Appcelerator บังคับให้แถว TableView ทั้งหมดแสดงผลเมื่อโหลด

นี่ดูซวยนะ ฉันมี TableView พร้อม TableViewRows แบบกำหนดเองที่เพิ่มโดยทางโปรแกรม กำหนดเองโดยมีป้ายกำกับชิดซ้ายและสวิตช์ชิดขวา (คิดว่าเป็นตัวกรองการเรียกดู) ฉันแทรกแถวประเภทเดียวกันที่ด้านบนเพื่อสลับเปิด/ปิดสวิตช์ทั้งหมดโดยทางโปรแกรม

ทั้งหมดนี้ทำงานได้ตามที่ตั้งใจไว้ ยกเว้นเมื่อฉันมีแถวมากกว่าที่จะพอดีกับหน้าจอและพยายามสลับทั้งหมด ในกรณีนี้ แถวที่กำหนดเองจะปิดหน้าจอโดยไม่แสดงผลเมื่อโหลดมุมมอง ดังนั้นจึงไม่เริ่มการทำงานของเหตุการณ์ที่เปลี่ยนแปลงเมื่อจัดการโดยทางโปรแกรม

หากฉันเลื่อนไปที่ด้านล่างด้วยตนเองเพื่อบังคับให้แสดงผลแถวทั้งหมด จากนั้นพยายามสลับทั้งหมด มันก็ใช้งานได้ดี

มีวิธีบังคับให้แถว TableView ทั้งหมด (แม้แต่แถวที่อยู่นอกหน้าจอ) แสดงผลเมื่อโหลดมุมมองหรือไม่ หรือมีวิธีแก้ไขปัญหาที่ฉันสามารถทำได้?


person Adam Milecki    schedule 15.04.2016    source แหล่งที่มา
comment
การเรนเดอร์แบบ Lazy เป็นพฤติกรรมที่มีอยู่แล้วใน iOS และ Android SDK เพื่อปรับปรุงประสิทธิภาพ ฉันไม่เชื่อว่าเราจะปิดการใช้งานสิ่งนั้นได้   -  person Fokke Zandbergen    schedule 18.04.2016


คำตอบ (1)


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

จากนั้นฉันบังคับให้ scrollToIndex ไปที่แถวสุดท้าย จากนั้น scrollToIndex กลับไปที่แถวแรกทันที เนื่องจากฉันทำสิ่งนี้ทันทีหลังจากเพิ่มแถว ฉันจึงต้องใช้ setTimeout เพื่อให้แน่ใจว่าครอบคลุมเวลาในการโหลด

setTimeout(function() {
    $.tblOptions.scrollToIndex(lastIndex, { animated: false, position: Titanium.UI.iPhone.TableViewScrollPosition.BOTTOM });
}, 0);

เนื่องจากสิ่งนี้สร้างประสบการณ์ผู้ใช้ที่กระตุก ฉันจึงซ่อนตารางระหว่างการโหลด แสดงตัวบ่งชี้กิจกรรม จากนั้นจึงแสดงตารางอีกครั้งหลังการโหลด

สิ่งนี้จะได้ผลในตอนนี้ แต่ฉันยังคงสงสัยว่ามีวิธีแก้ไขปัญหาที่ง่ายกว่านี้หรือไม่

person Adam Milecki    schedule 15.04.2016