Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีใช้ Nested Array (อาร์เรย์ซ้อน) ใน Android ListView

การแสดงข้อมูลจาก Nested Array (อาร์เรย์หลายมิติ) ใน ListView

ตัวอย่างนี้แสดงวิธีแปลงอาร์เรย์ 2 มิติ (2D Array) ให้เป็นรายการเดียว (Flatten) เพื่อแสดงใน ListView

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

Android Studio → File → New Project

ขั้นตอนที่ 2: Layout XML (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_marginTop="30dp"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ListView>

</LinearLayout>

ขั้นตอนที่ 3: โค้ด Java (src/MainActivity.java)

package com.example.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {
    ListView list;
    // อาร์เรย์ 2 มิติ: กลุ่มชื่อ 2 กลุ่ม
    String[][] deepArr = new String[][] {{"Sai", "Gopal"}, {"Pallavi", "Priya"}};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = findViewById(R.id.list);

        ArrayList<String> arrayList = new ArrayList<String>();

        // วนลูปผ่านอาร์เรย์ 2 มิติ (Flatten)
        for (String[] group : deepArr) {
            for (String name : group) {
                arrayList.add(name);
            }
        }

        // หรือใช้ Java 8 Stream (API 24+)
        // Arrays.stream(deepArr).flatMap(Arrays::stream).forEach(arrayList::add);

        ArrayAdapter adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, arrayList);
        list.setAdapter(adapter);
    }
}

การทดสอบ

รันแอป จะแสดงชื่อทั้ง 4 ชื่อใน ListView: Sai, Gopal, Pallavi, Priya

วิธีใช้ Nested Array (อาร์เรย์ซ้อน) ใน Android ListView

วิธีอื่นๆ สำหรับ Flatten Array

1. ใช้ Java 8 Stream (API Level 24+)

List<String> flatList = Arrays.stream(deepArr)
    .flatMap(Arrays::stream)
    .collect(Collectors.toList());

2. ใช้ Apache Commons Lang

String[] flatArray = ArrayUtils.addAll(deepArr[0], deepArr[1]);

3. คำนวณขนาดก่อนสร้าง ArrayList (ประหยัดหน่วยความจำ)

int totalSize = 0;
for (String[] group : deepArr) totalSize += group.length;
ArrayList<String> arrayList = new ArrayList<>(totalSize);

กรณีการใช้งานจริง

  • ข้อมูลกลุ่ม/หมวดหมู่ (Contacts by groups, Products by categories)
  • Matrix หรือ Grid data ที่ต้องแสดงแบบรายการเดียว
  • Parse JSON arrays ที่ซ้อนกัน