অ্যান্ড্রয়েড অ্যাপে পুল টু রিফ্রেশ যুক্ত করা

আমরা যখন ইন্টারনেট নির্ভর কোন অ্যাপ তৈরি করব, তখন আমাদের মাঝে মাঝে ডেটা আপডেট করার দরকার হতে পারে। আর সাধারণত আমরা প্রায় সব গুলো অ্যাপেই দেখি পুল টু রিফ্রেশ অপশনটা যুক্ত থাকে। এটাকে Swipe to Refresh ও বলা হয়। Swipe to Refresh যুক্ত করার জন্য আমাদের সাপোর্ট লাইব্রেরির দরকার হবে। গ্রেডেল ডিফেন্ডেন্সিতে সাপোর্ট লাইব্রেরি যুক্ত করে নিবঃ

compile 'com.android.support:support-v4:25.3.1'

এই অ্যাপে আমরা লিস্ট ভিউতে পুল টু রিফ্রেশ যুক্ত করব। অ্যান্ড্রয়েড লিস্ট ভিউ – Android ListView লেখাটিতে আমরা দেখেছি কিভাবে লিস্ট ভিউ নিয়ে কাজ করা যায়। আমরা ঐ প্রজেক্টেই পুল টু অপশন যুক্ত করব। আমাদের অ্যাপ দেখতে এমন হবেঃ

সোয়াইপ টু রিফ্রেশ যুক্ত করার জন্য আমাদের লিস্ট ভিউ android.support.v4.widget.SwipeRefreshLayout উইজেটের মধ্যে রাখতে হবে। activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="me.jakir.swipetorefreshinlistview.MainActivity">

    <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_refresh_layout" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent">

        <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" />
    </android.support.v4.widget.SwipeRefreshLayout>
</android.support.constraint.ConstraintLayout>

লিস্টভিউ এর লিস্ট আইটেমের জন্য list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
</TextView>

এতটুকু করলেই সোয়াইপ করতে পারব আমরা। সোয়াইপ করছে কিনা, তা চেক করার জন্য আমাদের setOnRefreshListener যুক্ত করতে হবে। তা যুক্ত করতে পারি এভাবেঃ

  mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                refreshContent();
            }
        });

refreshContent মেথডে হয়তো আমরা নেটওয়ার্ক কল করব। নেটওয়ার্ক কল করে যে ডেটা গুলো পাবো, যে গুলো লিস্টে যুক্ত করব। এই উদাহরণে আমরা নেটওয়ার্ক কল না করে এমনিতে একটা ডামি ডেটা যুক্ত করেছি লিস্ট ভিউতেঃ

  private void refreshContent() {

        mSwipeRefreshLayout.setRefreshing(false);
        rainbowColors.add("Another color");
        mAdapter.notifyDataSetChanged();

    }

সম্পূর্ণ MainActivity.java:

import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    SwipeRefreshLayout mSwipeRefreshLayout;
    ArrayAdapter<String> mAdapter;
    ListView mListView;
    ArrayList<String> rainbowColors = new ArrayList<String>();

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

        // add click listener on list item
        registerClickCallBack();
    }


    private void populateListView() {



        // crate list of list_items
        rainbowColors.add("Red");
        rainbowColors.add("Orange");
        rainbowColors.add("Yellow");

        // build adapter
        mAdapter = new ArrayAdapter<String>(this, R.layout.list_item, rainbowColors);

        // configure list view
        mListView = (ListView) findViewById(R.id.list_view);

        mListView.setAdapter(mAdapter);


        mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                refreshContent();
            }
        });

    }


    private void registerClickCallBack() {
        ListView list = (ListView) findViewById(R.id.list_view);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                TextView textView = (TextView) view;
                String message = "You clicked # " + position + ", which is : "
                        + textView.getText().toString();
                Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
            }
        });

    }

    private void refreshContent() {

        mSwipeRefreshLayout.setRefreshing(false);
        rainbowColors.add("Another color");
        mAdapter.notifyDataSetChanged();

    }
}

অ্যাপটি রান করে পুল টু রিফ্রেশ করলে লিস্ট ভিউতে নতুন একটা আইটেম যুক্ত হবে। এবার নিজের মত করে মডিফাই করে যে কোন কিছুই আপনি করতে পারেন।

সোর্সকোড পাওয়া যাবে গিটহাবে। এন্ড্রয়েড নিয়ে অন্যান্য লেখা গুলো পাওয়া যাবে অ্যাপ ডেভ পেইজে।

Leave a Reply