কম্পিউটার টিউটোরিয়াল

Android ListView-এ এলিমেন্ট অস্তিত্ব (Existence) চেক করে যোগ করা

ArrayList.contains() ব্যবহার করে ডুপ্লিকেট প্রতিরোধ করে ListView-এ আইটেম যোগ করা

এই উদাহরণে একটি EditText-এ ইনপুট নিয়ে ListView-এ থাকা আইটেমের সাথে মিলিয়ে দেখানো হয়েছে। যদি আগে থেকে থাকে তবে Toast দেখাবে, না থাকলে যোগ করবে।

লেআউট (activity_main.xml)

<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"
    android:padding="16dp"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/edit_query"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="আইটেম লিখুন" />

    <Button
        android:id="@+id/buttonPanel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add / Check"
        android:layout_marginTop="16dp" />

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_marginTop="16dp" />

</LinearLayout>

MainActivity.java

package com.example.myapplication;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {

    ListView listView;
    EditText editText;
    ArrayList<String> itemList;
    ArrayAdapter<String> adapter;

    // প্রাথমিক ডেটা
    String[] mobileArray = {"Android", "iPhone", "Windows Mobile", "Blackberry", "WebOS", "Ubuntu", "Windows 7", "Mac OS X"};

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

        editText = findViewById(R.id.edit_query);
        listView = findViewById(R.id.list);

        // ArrayList ইনিশিয়ালাইজ
        itemList = new ArrayList<>(Arrays.asList(mobileArray));

        // অ্যাডাপ্টার তৈরি
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, itemList);
        listView.setAdapter(adapter);

        findViewById(R.id.buttonPanel).setOnClickListener(v -> {
            String input = editText.getText().toString().trim();
            
            if (input.isEmpty()) {
                Toast.makeText(this, "টেক্সট লিখুন", Toast.LENGTH_SHORT).show();
                return;
            }

            // অস্তিত্ব চেক (O(n) - ArrayList.contains() লিনিয়ার সার্চ করে)
            if (itemList.contains(input)) {
                Toast.makeText(this, "⚠️ '" + input + "' ইতিমধ্যে লিস্টে আছে", Toast.LENGTH_LONG).show();
            } else {
                // নতুন আইটেম যোগ
                itemList.add(input);
                // অ্যাডাপ্টারকে ডেটা পরিবর্তন জানান
                adapter.notifyDataSetChanged();
                Toast.makeText(this, "✅ '" + input + "' যোগ করা হয়েছে", Toast.LENGTH_SHORT).show();
                editText.setText(""); // ইনপুট ক্লিয়ার
            }
        });
    }
}

ArrayList.contains() এর কাজ করার পদ্ধতি

  • লিনিয়ার সার্চ (O(n)): প্রতিটি এলিমেন্টের সাথে .equals() দিয়ে তুলনা করে
  • কেস-সেনসিটিভ: "Android" != "android"
  • Null-সেফ: null এলিমেন্টও চেক করতে পারে

অপ্টিমাইজেশন: HashSet ব্যবহার (O(1) লুকআপ)

// দ্রুত লুকআপের জন্য HashSet মেইন্টেইন করুন
HashSet<String> itemSet = new HashSet<>(itemList);

// চেক
if (itemSet.contains(input)) { ... }

// যোগ করার সময় দুটোতে যোগ করুন
itemList.add(input);
itemSet.add(input);
adapter.notifyDataSetChanged();

কেস-ইনসেনসিটিভ চেক

// সবারকে lowercase-এ রূপান্তর করে চেক
String lowerInput = input.toLowerCase();
boolean exists = itemList.stream()
    .anyMatch(item -> item.toLowerCase().equals(lowerInput));

RecyclerView-এ বাস্তবায়ন (আধুনিক)

// RecyclerView.Adapter-এ
public void addItem(String item) {
    if (!itemSet.contains(item)) {
        itemList.add(item);
        itemSet.add(item);
        notifyItemInserted(itemList.size() - 1); // শুধু নতুন আইটেম 애니মেট
    }
}

সর্বোত্তম অভ্যাস

  • বড় লিস্টের জন্য HashSet বা TreeSet ব্যবহার করুন O(1)/O(log n) লুকআপের জন্য
  • adapter.notifyDataSetChanged() বদলে স্পেসিফিক নোটিফাই মেথড ব্যবহার করুন (notifyItemInserted, notifyItemRangeChanged)
  • ইনপুট স্যানিটাইজ করুন (trim, validation)
  • ইউজার ফিডব্যাক দিন (Toast, Snackbar, Animation)

Android ListView-এ এলিমেন্ট অস্তিত্ব (Existence) চেক করে যোগ করা Android ListView-এ এলিমেন্ট অস্তিত্ব (Existence) চেক করে যোগ করা

  1. Android-এ অ্যারেতে মাঝপথের এলিমেন্ট বের করার পদ্ধতি

  2. Android-এ ListView-এর জন্য ArrayList-এ এলিমেন্ট যোগ করার পদ্ধতি

  3. Android-এ ConcurrentLinkedDeque-এ এলিমেন্ট উপস্থিত কিনা যাচাই করার পদ্ধতি

  4. অ্যান্ড্রয়েডে চলমান অ্যাপ্লিকেশন তালিকা পাওয়ার উপায়