RecyclerView
เป็นคอมโพเนนต์ View ที่ช่วยให้แสดงชุดข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพ
แทนที่จะสร้างมุมมองสำหรับแต่ละรายการในชุดข้อมูล
RecyclerView
จะปรับปรุงประสิทธิภาพของแอปโดยการเก็บพูลมุมมองขนาดเล็ก
และหมุนเวียนผ่านมุมมองเหล่านั้นขณะที่คุณเลื่อนดูรายการ
ใน Compose คุณสามารถใช้รายการแบบเลซี่เพื่อทำสิ่งเดียวกันนี้ได้ หน้านี้อธิบายวิธีย้ายข้อมูลการติดตั้งใช้งาน RecyclerView
เพื่อใช้ Lazy List ใน Compose
ขั้นตอนการย้ายข้อมูล
หากต้องการย้ายข้อมูลการติดตั้งใช้งาน RecyclerView
ไปยัง Compose ให้ทำตามขั้นตอนต่อไปนี้
แสดงความคิดเห็นหรือนำ
RecyclerView
ออกจากลำดับชั้น UI แล้วเพิ่มComposeView
เพื่อแทนที่หากยังไม่มีในลำดับชั้น นี่คือคอนเทนเนอร์สำหรับรายการขี้เกียจที่คุณจะเพิ่ม<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- <androidx.recyclerview.widget.RecyclerView--> <!-- android:id="@+id/recycler_view"--> <!-- android:layout_width="match_parent"--> <!-- android:layout_height="match_parent />"--> <androidx.compose.ui.platform.ComposeView android:id="@+id/compose_view" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
กำหนดประเภทของ Composable รายการแบบ Lazy ที่คุณต้องการโดยอิงตาม
RecyclerView
ของ Layout Manager (ดูตารางด้านล่าง) Composable ที่คุณเลือก จะเป็น Composable ระดับบนสุดของComposeView
ที่คุณเพิ่มใน ขั้นตอนก่อนหน้าLayoutManager
ประกอบกันได้
LinearLayoutManager
LazyColumn
หรือLazyRow
GridLayoutManager
LazyVerticalGrid
หรือLazyHorizontalGrid
StaggeredGridLayoutManager
LazyVerticalStaggeredGrid
หรือLazyHorizontalStaggeredGrid
// recyclerView.layoutManager = LinearLayoutManager(context) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { // We use a LazyColumn since the layout manager of the RecyclerView is a vertical LinearLayoutManager } }
สร้าง Composable ที่สอดคล้องกันสำหรับแต่ละประเภทมุมมองใน
RecyclerView.Adapter
การใช้งาน โดยปกติแล้ว มุมมองแต่ละประเภทจะแมปกับViewHolder
คลาสย่อย แต่ก็อาจไม่เป็นเช่นนั้นเสมอไป ระบบจะใช้ Composable เหล่านี้เป็นตัวแทน UI สำหรับองค์ประกอบประเภทต่างๆ ในรายการ@Composable fun ListItem(data: MyData, modifier: Modifier = Modifier) { Row(modifier.fillMaxWidth()) { Text(text = data.name) // … other composables required for displaying `data` } }
ระบบจะแทนที่ตรรกะในเมธอด
onCreateViewHolder()
และonBindViewHolder()
ของRecyclerView.Adapter
ด้วย Composable เหล่านี้และสถานะที่คุณระบุ ใน Compose จะไม่มีการแยกส่วนระหว่าง การสร้าง Composable สำหรับรายการและการเชื่อมโยงข้อมูลกับรายการนั้นๆ เนื่องจากแนวคิดเหล่านี้ รวมกันอยู่ภายใน
content
ช่องของรายการแบบ Lazy (พารามิเตอร์ Lambda ต่อท้าย) ให้ใช้ฟังก์ชันitems()
(หรือการโอเวอร์โหลดที่เทียบเท่า) เพื่อวนซ้ำผ่าน ข้อมูลสำหรับรายการ ในitemContent
Lambda ให้เรียกใช้ไอเทมที่ประกอบได้ที่เหมาะสมสำหรับข้อมูลของคุณval data = listOf<MyData>(/* ... */) composeView.setContent { LazyColumn(Modifier.fillMaxSize()) { items(data) { ListItem(it) } } }
กรณีการใช้งานทั่วไป
การตกแต่งไอเทม
RecyclerView
มีแนวคิดของ ItemDecoration
ซึ่งคุณใช้เพื่อเพิ่มภาพวาดพิเศษสำหรับรายการในลิสต์ได้ เช่น คุณสามารถเพิ่ม
ItemDecoration
เพื่อเพิ่มเส้นแบ่งระหว่างรายการได้
val itemDecoration = DividerItemDecoration(recyclerView.context, LinearLayoutManager.VERTICAL) recyclerView.addItemDecoration(itemDecoration)
Compose ไม่มีแนวคิดที่เทียบเท่ากับการตกแต่งรายการ แต่คุณสามารถเพิ่มการตกแต่ง UI ในรายการได้โดยตรงในการจัดองค์ประกอบ เช่น หากต้องการเพิ่มตัวคั่นลงในรายการ คุณสามารถใช้ Divider
ที่ใช้ร่วมกันได้หลังจากแต่ละ
รายการ
LazyColumn(Modifier.fillMaxSize()) { itemsIndexed(data) { index, d -> ListItem(d) if (index != data.size - 1) { HorizontalDivider() } } }
ภาพเคลื่อนไหวของรายการ
ItemAnimator
สามารถตั้งค่าใน RecyclerView
เพื่อทําให้ลักษณะที่ปรากฏของ
รายการเคลื่อนไหวเมื่อมีการเปลี่ยนแปลงในอแดปเตอร์ โดยค่าเริ่มต้น RecyclerView
จะใช้
DefaultItemAnimator
ซึ่งให้ภาพเคลื่อนไหวพื้นฐานเมื่อนำออก เพิ่ม และ
ย้ายเหตุการณ์
Lazy List มีแนวคิดคล้ายกันผ่านตัวแก้ไข animateItemPlacement
ดูข้อมูลเพิ่มเติมได้ที่ภาพเคลื่อนไหวของไอเทม
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูล RecyclerView
ไปยัง Compose ได้ที่แหล่งข้อมูลต่อไปนี้
- รายการและตารางกริด: เอกสารประกอบเกี่ยวกับวิธีใช้งานรายการและตารางกริดใน Compose
- การทำงานร่วมกันของ Jetpack Compose: การใช้ Compose ใน RecyclerView:
บล็อกโพสต์สำหรับการใช้ Compose อย่างมีประสิทธิภาพภายใน
RecyclerView
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- รายการและตารางกริด
- ย้ายข้อมูลจาก
CoordinatorLayout
ไปยัง Compose - ข้อควรพิจารณาอื่นๆ