অ্যান্ড্রয়েড লিস্ট ভিউ থেকে এক্টিভিটি – ListView to new activity

আমরা পৃথিবীর ১০ বিলিওনিয়ারের তথ্য নিয়ে একটা অ্যাপ বানাবো। সেখানে প্রথম পেইজে থাকবে ঐ দশ জন বিলিওনিয়ারের নাম। যা থাকবে একটা লিস্ট ভিউতে। এবং পরে ঐ নামের যে কোন একটাতে ক্লিক করলে নতুন আরেকটা এক্টিভিটি ওপেন হবে, যেখানে ঐ সিলেক্টেড বিলিওনিয়ারের তথ্য দেখাবে। এরকম অ্যাপ কিভাবে তৈরি করা যায়, তাই দেখব। প্রথমেই এন্ড্রয়েড স্টুডিওতে একটা প্রজেক্ট তৈরি করে নি। যেমন ListViewToActivity.

 

res ফোল্ডারের ভেতর Values নামে একটা ফোল্ডার রয়েছে। সেখানে strings.xml নামে একটা ফাইল রয়েছে। যেখানে আমরা বিলিওনিয়ারদের তথ্য রাখব। একটা string-array তৈরি করি এবং সেখানে বিলিওনিয়ারদের নাম রাখি। রাখার পর আমাদের  strings.xml দেখতে নিচের মত হবেঃ

 

<resources>
    <string name="app_name">List View to Activity</string>

    <string-array name="billionaires">
        <item>Bill Gates</item>
        <item>Carlos Slim Helu</item>
        <item>Warren Buffett</item>
        <item>Amancio Ortega</item>
        <item>Larry Ellison</item>
        <item>Charles Koch</item>
        <item>David Koch</item>
        <item>Christy Walton</item>
        <item>Jim Walton</item>
        <item>Liliane Bettencourt</item>
    </string-array>

</resources>

 

আমাদের activity_main.xml এ লেআউটে আমরা বিলিওনিয়ারের নামের লিস্ট দেখাবো। আর নাম গুলো থাকবে একটা টেক্সটভিউতে। তাই আমাদের activity_main.xml হবে নিচের মত করেঃ

 

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/label"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dip"
    android:textSize="16dip"
    android:textStyle="bold">
</TextView>


 

উপরের লেআউটে শুধু বিলিওনিয়ারদের লিস্ট দেখাবে। আমরা যখন একজনের নামের উপর ক্লিক করব, তখন আরেকটা লেআউটে তাদের তথ্য দেখাবো। তার জন্য আমাদের আরেকটা লেআউট ফাইল দরকার। যেমন single_item.xml এবং সেখানে দুইটা ভিউ যুক্ত করব। একটাতে বিলিওনিয়ারের নাম থাকবে। আরকেটাতে বিলিওনিয়ার সম্পর্কে কিছু তথ্য থাকবে। single_item.xml:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:padding="15dp"
    android:layout_height="match_parent">
    <TextView android:id="@+id/billionaire_label"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="25dp"
        android:textStyle="bold"
       />
    <TextView android:id="@+id/billionaire_info"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="25dp"
        />
</LinearLayout>

 

আমাদের MainActivity.java তে আমরা দুইটি কাজ করব। একটা হচ্ছে xml স্ট্রিং রিসোর্স থেকে বিলিওনিয়ারদের নামের অ্যারে থেকে লিস্ট তৈরি করব। এবং পরে ঐ লিস্টের যে কোন আইটেমে ক্লিক করলে নতুন আরেকটি এক্টিভিটি ওপেন হবে। MainActivity.java

 

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends ListActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // storing string resources into Array
        String[] billionaires = getResources().getStringArray(R.array.billionaires);

        // Binding resources Array to ListAdapter
        this.setListAdapter(new ArrayAdapter<String>(this, R.layout.activity_main, R.id.label, billionaires));

        ListView listView = getListView();

        // listening to single list item on click
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {

                // clicked  item
                String billionaireName = ((TextView) view).getText().toString();

                // Launching new Activity on selecting single List Item
                Intent i = new Intent(getApplicationContext(), SingleItem.class);
                // sending data to new activity
                i.putExtra("billionaireName", billionaireName);
                startActivity(i);

            }
        });

    }
}

এখানে আমরা বলে দিয়েছি যদি কোন আইটেমে ক্লিক করে, তাহলে নতুন এক্টিভিটি ওপেন করতে। এবং নতুন এক্টিভিটিতে কিছু ডেটা পাস করছি আমরা। ডেটা হিসেবে এখানে আমরা বিলিওনিয়ারের নাম পাস করতেছি। আমাদের আরেকটি java ফাইল তৈরি করতে হবে। যেটা সিঙ্গেল আইটেম এক্টিভিটি হিসেবে কাজ করবে। SingleItem.java:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SingleItem extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.single_item);

        TextView billionaireLabel = (TextView) findViewById(R.id.billionaire_label);
        TextView billionaireInfo = (TextView) findViewById(R.id.billionaire_info);

        // get data
        Intent i = getIntent();
        String billionaireName = i.getStringExtra("billionaireName");

        // set data to view
        billionaireLabel.setText(billionaireName);
        billionaireInfo.setText("Something cool about " + billionaireName);

    }
}

এখন যদি প্রজেক্টটি রান করি, তাহলে রান হবে। কিন্তু কোন আইটেমে ক্লিক করলে অ্যাপ ক্র্যাস করবে। কারণ AndroidManifest এ Single Item এক্টিভিটি যোগ করা হয় নি। তা যুক্ত করে দিব নিচের মত করেঃ

     <activity android:name=".SingleItem"
            android:label="Single Item "></activity>

সম্পুর্ণ AndroidManifest :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="me.jakir.listviewtoactivity">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SingleItem"
            android:label="Single Item "></activity>
    </application>

</manifest>

আউটপুটঃ
billioniares
 
আমরা দারুণ একটা অ্যাপ তৈরি করা শিখে ফেলছি। এবার নিজের মত করে অনেক কিছুই এ থেকে তৈরি করা যাবে। এ জিনিসটা আরো সুন্দর ভাবে করা যায়। সহজে বোঝানোর জন্যই এভাবে লেখা। সুন্দর ভাবে করার দ্বায়িত্ব আপনা। দারুণ একটা অ্যাপ তৈরি করে নিজেকে বিলিওনিয়ার লিস্টে যুক্ত করে দিন। কারণ বিলিওনিয়ার লিস্টের বেশির ভাগ মানুষই প্রোগ্রামার।
 

 কোড গুলো পাওয়া যাবে গিটহাবে।

 

অ্যান্ড্রয়েড নিয়ে অন্য সব গুলো লেখা।

1 thought on “অ্যান্ড্রয়েড লিস্ট ভিউ থেকে এক্টিভিটি – ListView to new activity”

  1. ধন্যবাদ দিয়ে ছোট করবনা ভাই! চালিয়ে যান (y)

    Reply

Leave a Reply