
ইউজার ইন্টারফেসের সাথে ক্লাস এবং ডাটা সরাসরি বাইন্ড করার জন্যে এন্ড্রয়েডের রয়েছে সাপোর্ট লাইব্রেরী (ডাটা বাইন্ডিং)।
এই লাইব্রেরী ব্যবহার করে ইউজার ইন্টারফেসে সরাসরি মডেল ক্লাস থেকে ডাটা লোড করা যায়। এটি রিসাইকেলার ভিউ এর অধিকাংশ কোড কমিয়ে দিয়েছে। রিসাইকেলারের প্রত্যেক আইটেমকে একসাথেই বাইন্ড করে ফেলে।
আমরা ধীরে ধীরে দেখব
- কিভাবে আমরা সরাসরি ভিউ বাইন্ড করতে পারি।
- মডেল ক্লাস ব্যবহার করে ডাটা লোড করা
- টু ওয়ে বাইন্ডিং
- বাটন ক্লিক লিসেনার
- ইমেজ লোড করা
- অব্জারভেবল ফিল্ড (রানটাইমেই ডাটা আপডেট)
- রিসাইকেলার ভিউ ইমপ্লিমেন্টেশন
এই পর্বে আমরা দেখব, কিভাবে এই লাইব্রেরী ব্যবহার করে findViewById() ব্যবহার না করে ভিউ (টেক্সটভিউ, ইমেজভিউ, বাটন ইত্যাদি) কে বাইন্ড করতে পারি।
প্রথমেই এপ বিল্ড ফাইলে নিচের কোড এড করে আমাদের প্রজেক্টে ডাটা বাইন্ডিং এনেবল করতে হবে। আপনার প্রজেক্টি এখন বিল্ড করুন।
1 2 3 |
android { dataBinding.enabled = true } |
প্রতিটি একটিভিটি কে কেন্দ্র করে লেয়াউট থাকে। আমাদের কে (<layout> </layout>) ট্যাগ কে রুট হিসেবে রাখতে হবে। সাথে সাথেই এন্ড্রয়েড লেয়াটের নাম অনুসরণ করে একটি ক্লাস তৈরি করবে যা ডাটা বাইন্ডিং প্যাকেজের মধ্যে থাকে।
আমাদের লেয়াউটের নাম activity_main.xml হলে MainActivity তে আমরা ActivityMainBinding নামে একটি ডাটাবাইন্ডিং ক্লাস পাব।
নিচের কোড টি ভাল করে লক্ষ্য করলেই আমরা দেখব যে <layout> </layout> ট্যাগ লেয়াউটের রুট হাইরারকি তে রাখা হয়েছে।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?xml version="1.0" encoding="utf-8"?> <layout 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"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.ashiqulislam.databindingpractice.MainActivity"> <TextView android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="Hello World!" /> </LinearLayout> </layout> |
MainActivity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import android.databinding.DataBindingUtil; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.example.ashiqulislam.databindingpractice.databinding.ActivityMainBinding; public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.text1.setText("I am ashiq"); } } |
উপরের ক্লাসে আমরা দেখতে পাচ্ছি
private ActivityMainBinding binding;
এখানে ActivityMainBinding যা লেয়াউট কেন্দ্র করে জেনারেট হয়েছে প্রজেক্টে। binding ভেরিয়েবলে লেয়াউট লোড করার পর বাইন্ডি ভেরিয়েবল দিয়ে আমরা সেই লেয়াউটের সকল ভিউ এক্সেস করতে পারব। উপরে আমরা text1 কে এক্সেস করেছি।
ডাটা বাইন্ডিং ব্যবহার করে আমাদের টাইপ কাস্টিং বা findViewById() মেথোডের ঝামেলা নেই।
এভাবে আমরা ইমেজভিউ, বাটন ইত্যাদি ভিউ বা লেয়াউট কন্টেইনার কাস্টিং ছাড়াই লোড করতে পারি।
মডেল ক্লাস Person
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
মডেল ক্লাসের ডাটা লোড করার জন্যে আমরা আমাদের লেয়াউটে কিছু পরিবর্তন এনেছি।
রুট লেয়াউট ট্যাগের পর আমরা ডাটা ট্যাগের মাধ্যমে লেয়াউটে প্রয়োজনীয় ভেরিয়েবল ডিক্লেয়ার করতে পারি। যা ব্যবহার করে আমরা xml এ ডাটা লোড করব।
এই ক্ষেত্রে আমরা ভেরিয়েবল নাম রেখেছি person এবং তার ডাটাটাইপ আমরা type এট্রিবিউট দ্বারা ডিফাইন করেছি।
রানটাইমে ডাটা লোড করার জন্যে এখানে textview তে android:text=”@{person.name}” ব্যবহার করেছি।
কার্লি ব্রেকেট এর ভিতর আমরা আমাদের ডিফাইন করা ভেরিয়েবল দিয়ে মডেল ক্লাসের name field টি এক্সেস করেছি।
যখন আমরা MainActivity ক্লাসে ডাটা সেট করব এবং বাইন্ড করার পর আমরা ইউজার ইন্টারফেসে ডাটা দেখতে পারব।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?xml version="1.0" encoding="utf-8"?> <layout 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"> <data> <variable name="person" type="com.example.ashiqulislam.databindingpractice.Person"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.ashiqulislam.databindingpractice.MainActivity"> <TextView android:id="@+id/text1" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="@{person.name}" /> </LinearLayout> </layout> |
মডেল ক্লাসে ডাটা সেট করেছি। এরপর ভিউয়ের সাথে মডেল ক্লাস সেট করেছি। এপ্লিকেশন রান করলেই টেক্সটভিউ তে আমরা ডাটা দেখতে পারব।
MainActivity class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import android.databinding.DataBindingUtil; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.example.ashiqulislam.databindingpractice.databinding.ActivityMainBinding; public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); //binding.text1.setText("I am ashiq"); Person person = new Person("Ashiqul Islam Shaon"); binding.setPerson(person); } } |
পরবর্তী পর্বে আমরা মডেল ক্লাস ব্যবহার করে recycler view ডাটা লোড করব।
Stay tune…………..