โดยปกติเราจะไม่ทำรัง ListView ใน ScrollView แต่ก็โอเคถ้าผู้สัมภาษณ์ยืนยันว่าฉันทำรัง
การเพิ่ม ListView ไปยัง ScrollView จะทำให้การควบคุม ListView ไม่สมบูรณ์และโดยปกติจะแสดงเพียงหนึ่งเดียวเท่านั้น เหตุผลคืออะไร?
เหตุการณ์สกรอลล์ขัดแย้งระหว่างการควบคุมทั้งสองส่งผลให้ ดังนั้นจึงจำเป็นต้องคำนวณความสูงของการแสดงผลของ ListView ผ่านจำนวนรายการใน ListView เพื่อให้แสดงอย่างสมบูรณ์ วิธีการต่อไปนี้มีไว้สำหรับการอ้างอิงของคุณ
การแก้ปัญหามีดังนี้:
lv = (listView) findViewById (r.id.lv); อะแดปเตอร์ = ใหม่ myadapter (); LV.SetAdapter (อะแดปเตอร์); setlistviewheightbasedonchildren (LV); ----------------------------------------------- โมฆะสาธารณะ SetlistViewHeightBasedOnchildren (ListView ListView) {ListAdapter ListAdapter = ListView.getAdapter (); if (listAdapter == null) {return; } int totalHeight = 0; สำหรับ (int i = 0; i <listadapter.getCount (); i ++) {ดู listitem = listadapter.getView (i, null, listView); ListItem.Measure (0, 0); TotalHeight += ListItem.getMeasureDheight (); } viewGroup.layoutParams params = listView.getLayoutParams (); params.height = totalHeight + (listView.getDividerHeight () * (listAdapter.getCount () - 1)); params.height += 5; ListView.setLayoutParams (params); -วิธีที่ดีที่สุดในการจัดการกับมันในขั้นตอนนี้คือ: Custom ListView, overload onmeasure () วิธีและตั้งค่าการแสดงผลทั้งหมด
นำเข้า Android.widget.listview; / ** * * @description: การใช้งานอย่างง่ายของ listView ฝังตัวใน ScrollView * * @file: ScrollViewWithListView.java * * @version */ คลาสสาธารณะ ScrollViewWithListView ขยาย listView {Public ScrollViewWithListView attrs); } / ** * integer.max_value >> 2. หากไม่ได้ตั้งค่าการตั้งค่าเริ่มต้นของระบบคือการแสดงสองชิ้น * / โมฆะสาธารณะ onmeasure (int widthmeasurespec, int heightMeasurespec) {int expandSpec = measurespec.makemeasurespec super.onmeasure (WidthMeasuresPec, ExpandSpec); -เนื้อหาข้างต้นเป็นวิธีแก้ปัญหาในการฝัง ListView ใน ScrollView ที่ตัวแก้ไขแนะนำให้คุณรู้จัก ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน!