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

Android ListView-এ অ্যারে ইনিশিয়ালাইজেশনের পর এক্সটেন্ড (Extend) করা

System.arraycopy() ব্যবহার করে ফিক্সড সাইজ অ্যারে এক্সটেন্ড করা

Java-এ অ্যারে একবার ইনিশিয়ালাইজ হলে এর সাইজ পরিবর্তন করা যায় না। কিন্তু বড় আকারের নতুন অ্যারে তৈরি করে System.arraycopy() দিয়ে পুরনো ডেটা কপি করা যায়। এই টিউটোরিয়ালে তা ListView-এ দেখানো হলো।

লেআউট (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"
    tools:context=".MainActivity">

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

</LinearLayout>

MainActivity.java

package com.example.myapplication;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {

    ListView listView;
    String[] names = new String[]{"A", "B", "C"};
    String[] extended = new String[5]; // নতুন বড় অ্যারে (সাইজ ৫)

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

        listView = findViewById(R.id.list);

        // নতুন এলিমেন্ট যোগ
        extended[3] = "D";
        extended[4] = "E";

        // পুরনো অ্যারে থেকে নতুন অ্যারেতে কপি
        // System.arraycopy(src, srcPos, dest, destPos, length)
        System.arraycopy(names, 0, extended, 0, names.length);
        // ফলাফল: extended = ["A", "B", "C", "D", "E"]

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

System.arraycopy() প্যারামিটার ব্যাখ্যা

System.arraycopy(
    Object src,      // উৎস অ্যারে (names)
    int srcPos,      // উৎস থেকে শুরু ইনডেক্স (0)
    Object dest,     // গন্তব্য অ্যারে (extended)
    int destPos,     // গন্তব্যে শুরু ইনডেক্স (0)
    int length       // কপি করার এলিমেন্ট সংখ্যা (names.length = 3)
);

আধুনিক ও সহজ বিকল্পসমূহ

১. Arrays.copyOf() - নতুন অ্যারে রিটার্ন করে

String[] extended = Arrays.copyOf(names, 5); // সাইজ ৫-এ রিসাইজ
extended[3] = "D";
extended[4] = "E";

২. ArrayList - ডাইনামিক সাইজ (প্রস্তাবিত)

ArrayList<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
list.add("D");
list.add("E");
// ListView-এ ব্যবহার: new ArrayAdapter<>(this, layout, list)

৩. Java 8+ Stream API

String[] extended = Stream.concat(
    Arrays.stream(names), 
    Stream.of("D", "E")
).toArray(String[]::new);

পারফরম্যান্স টিপস

  • System.arraycopy() নেটিভ কোডে লেখা থাকায় সবচেয়ে ফাস্ট
  • বারবার রিসাইজ করতে হলে ArrayList ব্যবহার করুন (Amortized O(1) add)
  • Primitive array (int[], double[]) এর জন্য Arrays.copyOf() ব্যবহার করুন

দৃশ্যমান ফলাফল

ListView-এ ৫টি আইটেম দেখাবে: A, B, C, D, E

Android ListView-এ অ্যারে ইনিশিয়ালাইজেশনের পর এক্সটেন্ড (Extend) করা

  1. এন্ড্রয়েডে Volley এলিমেন্টগুলো ArrayList-এ পাওয়ার উপায়

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

  3. অ্যান্ড্রয়েড ListView-এ ক্লিক ইভেন্ট হ্যান্ডল করার পদ্ধতি

  4. এন্ড্রয়েডে ListView-এ নির্দিষ্ট পজিশনে প্রোগ্রামেটিক্যালি স্ক্রল করার পদ্ধতি