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

วิธีใช้ unmodifiableSet ใน Android

ตัวอย่าง: การใช้ unmodifiableSet ใน Android

ตัวอย่างนี้สาธิตวิธีใช้ Collections.unmodifiableSet() เพื่อสร้าง Set ที่อ่านอย่างเดียว (Read-only) ไม่สามารถแก้ไขได้

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

ไปที่ File → New Project แล้วกรอกรายละเอียดที่จำเป็น

ขั้นตอนที่ 2: เพิ่มโค้ดใน 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" />
    </LinearLayout>
    <ListView
        android:id = "@+id/listView"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content">
    </ListView>
</LinearLayout>

โค้ดข้างต้นใช้ EditText สำหรับชื่อ กด Save เพื่อเก็บข้อมูลใน ArrayList กด Refresh เพื่อแสดงการเปลี่ยนแปลงของ ListView

ขั้นตอนที่ 3: เพิ่มโค้ดใน 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.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.Collections;
import java.util.Set;
import java.util.ArrayList;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Vector;

public class MainActivity extends AppCompatActivity {
    EditText name;
    ArrayAdapter arrayAdapter;
    ArrayList<String> array_list;
    SortedSet set = new TreeSet();
    private ListView listView;

    @Override
    protected void onCreate(Bundle readdInstanceState) {
        super.onCreate(readdInstanceState);
        setContentView(R.layout.activity_main);
        array_list = new ArrayList<String>();
        name = findViewById(R.id.name);
        listView = findViewById(R.id.listView);

        findViewById(R.id.refresh).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                arrayAdapter.notifyDataSetChanged();
                listView.invalidateViews();
                listView.refreshDrawableState();
            }
        });

        findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!name.getText().toString().isEmpty()) {
                    set.add(name.getText().toString());
                    Set syncSet = Collections.unmodifiableSet(set);
                    array_list.clear();
                    array_list.addAll(syncSet);
                    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();
                } else {
                    name.setError("Enter NAME");
                }
            }
        });
    }
}

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

รันแอปพลิเคชันจาก Android Studio เลือกอุปกรณ์มือถือ แล้วตรวจสอบหน้าจอเริ่มต้น

วิธีใช้ unmodifiableSet ใน Android

ในผลลัพธ์ข้างต้น เราเพิ่มชื่อของสมาชิก TreeSet เข้า Adapter

สรุป

Collections.unmodifiableSet() ใช้สร้างมุมมอง (View) ของ Set ที่ไม่สามารถแก้ไขได้ (Immutable View) หากพยายามเพิ่ม ลบ หรือเปลี่ยนแปลงข้อมูลใน Set ที่ได้จากเมธอดนี้ จะเกิด UnsupportedOperationException ขึ้น ในตัวอย่างนี้ เราใช้ TreeSet (ซึ่งจัดเรียงข้อมูลอัตโนมัติ) แล้วห่อด้วย unmodifiableSet ก่อนนำไปแสดงใน ListView ซึ่งเป็นแนวทางปฏิบัติที่ดี (Best Practice) เมื่อต้องการส่งคืน Set ให้โค้ดภายนอกโดยไม่ต้องการให้แก้ไขข้อมูลต้นฉบับได้