ArrayAdapter এবং notifyDataSetChanged()-এ ডাইনামিক লিস্ট আপডেট
এই টিউটোরিয়ালটি দেখাবে কীভাবে ব্যবহারকারীর ইনপুট অনুযায়ী ListView-এ নতুন আইটেম যোগ করা এবং তাত্ক্ষণিক আপডেট করা যায়।
পদক্ষেপ ১: প্রজেক্ট তৈরি করুন
Android Studio-তে নতুন প্রজেক্ট শুরু করুন।
পদক্ষেপ ২: লেআউট XML (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="4dp">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter an item here"
android:inputType="text" />
<Button
android:id="@+id/btnAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/editText"
android:text="Add Item" />
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btnAdd" />
</RelativeLayout>
পদক্ষেপ ৩: MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
EditText editText;
Button btnAdd;
ListView listView;
ArrayList items = new ArrayList<>();
ArrayAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
btnAdd = findViewById(R.id.btnAdd);
listView = findViewById(R.id.listView);
// ArrayAdapter সেটআপ
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
listView.setAdapter(adapter);
btnAdd.setOnClickListener(v -> {
String newItem = editText.getText().toString().trim();
if (!newItem.isEmpty()) {
items.add(newItem); // ১. ডেটা সোর্স আপডেট
adapter.notifyDataSetChanged(); // ২. অ্যাডাপ্টারকে নোটিফাই
editText.setText(""); // ৩. ইনপুট ক্লিয়ার
}
});
// বোনাস: আইটেম ক্লিক হ্যান্ডলিং
listView.setOnItemClickListener((parent, view, position, id) -> {
String item = items.get(position);
// ডিলিট কনফার্মেশন 다이আলগ দেখান
new AlertDialog.Builder(this)
.setTitle("Delete?")
.setMessage("Remove '" + item + "'?")
.setPositiveButton("Yes", (dialog, which) -> {
items.remove(position);
adapter.notifyDataSetChanged();
})
.setNegativeButton("No", null)
.show();
});
// লং ক্লিক: এডিট
listView.setOnItemLongClickListener((parent, view, position, id) -> {
// এডিট ডায়ালগ দেখান
return true;
});
}
}
মূল কৌশল: Three Steps to Update
- Data Source Modify: `items.add()`, `items.remove()`, `items.set()`
- Notify Adapter: `adapter.notifyDataSetChanged()` (সম্পূর্ণ রিফ্রেশ) বা স্পেসিফিক মেথড
- UI Update: অ্যাডাপ্টার স্বয়ংক্রিয়ভাবে ভিউ আপডেট করে
অপ্টিমাইজড নোটিফিকেশন মেথডসমূহ
// একক আইটেম যোগ items.add(newItem); adapter.notifyItemInserted(items.size() - 1); // RecyclerView-এ // একক আইটেম মুছে ফেলা items.remove(position); adapter.notifyItemRemoved(position); // RecyclerView-এ // একক আইটেম আপডেট items.set(position, newValue); adapter.notifyItemChanged(position); // RecyclerView-এ // পুরো লিস্ট রিপ্লেস items.clear(); items.addAll(newItems); adapter.notifyDataSetChanged(); // এই কেসে ফুল রিফ্রেশই ভালো
RecyclerView এ 마이গ্রেশন (সুপারিশ করা)
ListView লেগেসি। RecyclerView-এ DefaultItemAnimator আছে যা অটোমেটিক অ্যানিমেশন দেয় (add/remove/move)।
রিয়েল-টাইম ডেটাবেজ (Firebase/Room) এর সাথে
- Room: LiveData
- >觀察 করুন, অ্যাডাপ্টারে submitList() ব্যবহার করুন (ListAdapter)
- Firebase: ChildEventListener-এ onChildAdded/Removed/Changed হ্যান্ডেল করুন