অ্যান্ড্রয়েড ViewPager

ViewPager হচ্ছে একটা লেআউট ম্যানেজার। যা ব্যবহারকারীকে ডানে বা বামে কোন কন্টেন্ট সোয়াইপ করতে দেয়। ViewPager প্রায় সময় Fragment এর সাথে ব্যবহার করা হয়। এখানে ফ্র্যাগমেন্ট দিয়েই ViewPager এর ইমপ্লিমেন্টেশন দেখানো হয়েছে। ফ্র্যাগমেন্ট সম্পর্কে জানতে নিচের লেখা গুলো দেখতে পারেনঃ

আমরা চাইলে কয়েকটি স্ট্যাটিক ফ্র্যাগমেন্ট তৈরি করে ভিউপেজার ইমপ্লিমেন্ট করতে পারি। এখানে ডাইনামিক ভাবে দেখানো হয়েছে।

ফ্র্যাগমেন্টের জন্য আমরা একটা ক্লাস তৈরি করব আর একটা লেআউট ফাইল তৈরি করব।

 
myfragment_layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:id="@+id/textView" />

</RelativeLayout>

 
MyFragment.java:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * Created by Jack on 1/11/2017.
 */

public class MyFragment extends Fragment {
    public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";

    public static final MyFragment newInstance(String message) {
        MyFragment fragment = new MyFragment();
        Bundle bdl = new Bundle(1);
        bdl.putString(EXTRA_MESSAGE, message);
        fragment.setArguments(bdl);
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        String message = getArguments().getString(EXTRA_MESSAGE);
        View v = inflater.inflate(R.layout.myfragment_layout, container, false);

        TextView messageTextView = (TextView) v.findViewById(R.id.textView);

        messageTextView.setText(message);

        return v;
    }

}

মেইন এক্টিভিটিতে আমরা ভিউপেজার যুক্ত করব।
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="me.jakir.simpleviewpager.MainActivity">


    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />


</RelativeLayout>

MainActivity.java

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    MyPageAdapter pageAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        List<Fragment> fragments = getFragments();

        pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
        ViewPager pager = (ViewPager)findViewById(R.id.viewpager);
        pager.setAdapter(pageAdapter);

    }

    private List<Fragment> getFragments(){
        List<Fragment> fList = new ArrayList<Fragment>();

        fList.add(MyFragment.newInstance("ViewPager One"));
        fList.add(MyFragment.newInstance("ViewPager Two"));
        fList.add(MyFragment.newInstance("ViewPager Three"));

        return fList;
    }

    private class MyPageAdapter extends FragmentPagerAdapter {
        private List<Fragment> fragments;

        public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {
            super(fm);
            this.fragments = fragments;
        }
        @Override
        public Fragment getItem(int position) {
            return this.fragments.get(position);
        }

        @Override
        public int getCount() {
            return this.fragments.size();
        }
    }
}

ফ্র্যাগমেন্ট গুলো আমরা ডাইনামিক্যালি যুক্ত করেছি। এখানে তিনটে যুক্ত করা হয়েছে। আমরা চাইলে যত ইচ্ছে, তত যুক্ত করতে পারি।

ভিউ পেজারে এডাপ্টার সেট করতে হয়। যেহেতু আমরা ফ্র্যাগমেন্ট নিয়ে কাজ করব, তাই একটা ক্লাস তৈরি করে নিয়েছি MyPageAdapter নামে যা এক্সটেন্ড করেছে FragmentPagerAdapter ক্লাসকে। এরপর ভিউপেজারে এডাপ্টার সেট করে দিয়েছি।
সোর্স গুলো পাওয়া যাবে গিটহাবে। এ প্রজেক্টের আরেকটা মডিফাইড ভার্সন হচ্ছে ইমেজ স্লাইডার। গিটহাবে সোর্স কোড পাওয়া যাবে।

Leave a Reply