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

วิธีลบข้อมูลจาก ArrayList สำหรับ ListView ใน Android

บทนำ

ตัวอย่างนี้สาธิตวิธีการลบองค์ประกอบออกจาก ArrayList และอัปเดต ListView ในแอปพลิเคชัน Android

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

เปิด Android Studio เลือก File → New Project กรอกข้อมูลที่จำเป็นเพื่อสร้างโปรเจกต์ใหม่

ขั้นตอนที่ 2: ออกแบบ Layout (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"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:hint="Enter Name"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/save"
            android:text="Save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/refresh"
            android:text="Refresh"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/delete"
            android:text="Delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>

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

</LinearLayout>

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

package com.example.andy.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    Button save, refresh;
    EditText name;
    ArrayAdapter<String> arrayAdapter;
    private ListView listView;
    ArrayList<String> array_list;

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

        array_list = new ArrayList<>();
        name = findViewById(R.id.name);
        listView = findViewById(R.id.listView);

        // ปุ่ม Refresh
        findViewById(R.id.refresh).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (arrayAdapter != null) {
                    arrayAdapter.notifyDataSetChanged();
                    listView.invalidateViews();
                    listView.refreshDrawableState();
                }
            }
        });

        // ปุ่ม Delete - ลบรายการที่ระบุ
        findViewById(R.id.delete).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String inputName = name.getText().toString().trim();
                if (array_list.size() > 0) {
                    if (!inputName.isEmpty()) {
                        boolean removed = array_list.remove(inputName);
                        arrayAdapter = new ArrayAdapter<>(MainActivity.this,
                                android.R.layout.simple_list_item_1, array_list);
                        listView.setAdapter(arrayAdapter);
                        if (removed) {
                            Toast.makeText(MainActivity.this, "Deleted", Toast.LENGTH_LONG).show();
                        } else {
                            Toast.makeText(MainActivity.this, "Item not found", Toast.LENGTH_LONG).show();
                        }
                    } else {
                        name.setError("Enter NAME");
                    }
                } else {
                    Toast.makeText(MainActivity.this, "There is no element to delete", Toast.LENGTH_LONG).show();
                }
            }
        });

        // ปุ่ม Save - เพิ่มข้อมูล
        findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String inputName = name.getText().toString().trim();
                if (!inputName.isEmpty()) {
                    array_list.add(inputName);
                    arrayAdapter = new ArrayAdapter<>(MainActivity.this,
                            android.R.layout.simple_list_item_1, array_list);
                    listView.setAdapter(arrayAdapter);
                    Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_LONG).show();
                    name.setText("");
                } else {
                    name.setError("Enter NAME");
                }
            }
        });
    }
}

การทดสอบแอปพลิเคชัน

รันแอปบนอุปกรณ์จริง จะเห็นหน้าจอเริ่มต้นพร้อมช่องกรอกและปุ่มควบคุม

วิธีลบข้อมูลจาก ArrayList สำหรับ ListView ใน Android

กรอกชื่อ กด Save เพื่อเพิ่มลง ArrayList และแสดงใน ListView

วิธีลบข้อมูลจาก ArrayList สำหรับ ListView ใน Android

กรอกชื่อที่ต้องการลบในช่อง EditText แล้วกด Delete - รายการจะถูกลบออกจาก ListView

ความแตกต่างระหว่าง ArrayList และ LinkedList ในการลบข้อมูล

ลักษณะ ArrayList LinkedList
การลบข้อมูลกลาง ช้า (ต้องเลื่อน index ต่อจากนั้น) เร็ว (แค่เปลี่ยน pointer)
หน่วยความจำ น้อยกว่า มากกว่า (เก็บ pointer)
เข้าถึงแบบสุ่ม เร็ว (O(1)) ช้า (O(n))

สรุป

ทั้ง ArrayList และ LinkedList ใช้เมธอด remove(Object o) ลบค่าแรกที่เจอเหมือนกัน แต่ประสิทธิภาพต่างกัน เลือกใช้ตามรูปแบบการใช้งานของแอป