ListView উদাহরণের আগে ListView সম্পর্কে জানুন: ListView হলো ArrayList, List বা ডাটাবেস থেকে কালেক্ট করা আইটেমের সমষ্টি। সাধারণত ভার্টিক্যাল ফরম্যাটে আইটেম কালেকশন, স্ক্রোল আপ/ডাউন এবং ক্লিকेबল।
কাস্টম ListView কী?
কাস্টম ListView কাজ করে কাস্টম Adapter-এর ভিত্তিতে। এই কাস্টম অ্যাডাপ্টারে কাস্টম অবজেক্ট পাস করা যায়। আমরা সাবজেক্ট ডেটা ListView-এ পাস করছি।
ধাপ ১: Android Studio-এ নতুন প্রজেক্ট তৈরি করুন
File → New Project → ডিটেইল পূরণ করুন।
ধাপ ২: res/layout/activity_main.xml-এ ListView যোগ করুন
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:divider="#000"
android:dividerHeight="1dp"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
ডিভাইডার হিসেবে কালো রঙ এবং ১dp হাইট সেট করা হয়েছে।
ধাপ ৩: src/MainActivity.java-এ কোড যোগ করুন
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView list = findViewById(R.id.list);
ArrayList<SubjectData> arrayList = new ArrayList<SubjectData>();
arrayList.add(new SubjectData("JAVA", "https://www.tutorialspoint.com/java/", "https://www.tutorialspoint.com/java/images/java-mini-logo.jpg"));
arrayList.add(new SubjectData("Python", "https://www.tutorialspoint.com/python/", "https://www.tutorialspoint.com/python/images/python-mini.jpg"));
arrayList.add(new SubjectData("Javascript", "https://www.tutorialspoint.com/javascript/", "https://www.tutorialspoint.com/javascript/images/javascript-mini-logo.jpg"));
arrayList.add(new SubjectData("Cprogramming", "https://www.tutorialspoint.com/cprogramming/", "https://www.tutorialspoint.com/cprogramming/images/c-mini-logo.jpg"));
arrayList.add(new SubjectData("Cplusplus", "https://www.tutorialspoint.com/cplusplus/", "https://www.tutorialspoint.com/cplusplus/images/cpp-mini-logo.jpg"));
arrayList.add(new SubjectData("Android", "https://www.tutorialspoint.com/android/", "https://www.tutorialspoint.com/android/images/android-mini-logo.jpg"));
CustomAdapter customAdapter = new CustomAdapter(this, arrayList);
list.setAdapter(customAdapter);
}
}
CustomAdapter ডিক্লেয়ার করে SubjectData পাস করা হয়েছে।
ধাপ ৪: CustomAdapter ক্লাস তৈরি করুন (src/CustomAdapter.java)
import android.content.Context;
import android.database.DataSetObserver;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
class CustomAdapter implements ListAdapter {
ArrayList<SubjectData> arrayList;
Context context;
public CustomAdapter(Context context, ArrayList<SubjectData> arrayList) {
this.arrayList = arrayList;
this.context = context;
}
@Override public boolean areAllItemsEnabled() { return false; }
@Override public boolean isEnabled(int position) { return true; }
@Override public void registerDataSetObserver(DataSetObserver observer) { }
@Override public void unregisterDataSetObserver(DataSetObserver observer) { }
@Override public int getCount() { return arrayList.size(); }
@Override public Object getItem(int position) { return position; }
@Override public long getItemId(int position) { return position; }
@Override public boolean hasStableIds() { return false; }
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SubjectData subjectData = arrayList.get(position);
if (convertView == null) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
convertView = layoutInflater.inflate(R.layout.list_row, null);
convertView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) { }
});
TextView title = convertView.findViewById(R.id.title);
ImageView image = convertView.findViewById(R.id.list_image);
title.setText(subjectData.SubjectName);
Picasso.with(context)
.load(subjectData.Image)
.into(image);
}
return convertView;
}
@Override public int getItemViewType(int position) { return position; }
@Override public int getViewTypeCount() { return arrayList.size(); }
@Override public boolean isEmpty() { return false; }
}
ধাপ ৫: SubjectData ক্লাস তৈরি করুন (src/SubjectData.java)
class SubjectData {
String SubjectName;
String Link;
String Image;
public SubjectData(String subjectName, String link, String image) {
this.SubjectName = subjectName;
this.Link = link;
this.Image = image;
}
}
ধাপ ৬: ইন্টারনেট থেকে ইমেজ লোড করার জন্য Picasso লাইব্রেরি ব্যবহার
Picasso.with(context)
.load(subjectData.Image)
.into(image);
ধাপ ৭: Gradle-এ Picasso লাইব্রেরি যোগ করুন
dependencies {
implementation 'com.squareup.picasso:picasso:2.5.1'
// অন্যান্য ডিপেনডেন্সি...
}
ধাপ ৮: Manifest-এ ইন্টারনেট পারমিশন দিন
<uses-permission android:name="android.permission.INTERNET"/>
অ্যাপ্লিকেশন রান করুন।

সাবজেক্টে ক্লিক করলে লিংক খুলবে।
