অ্যান্ড্রয়েড কোটলিন ফান্ডামেন্টালস 02.4: ডেটা-বাইন্ডিং বেসিক

এই কোডল্যাবটি Android Kotlin Fundamentals কোর্সের অংশ। আপনি যদি কোডল্যাবগুলি ক্রমানুসারে কাজ করেন তবে আপনি এই কোর্সের সর্বাধিক মূল্য পাবেন৷ সমস্ত কোর্স কোডল্যাব অ্যান্ড্রয়েড কোটলিন ফান্ডামেন্টাল কোডল্যাব ল্যান্ডিং পৃষ্ঠায় তালিকাভুক্ত করা হয়েছে।

ভূমিকা

এই কোর্সের পূর্ববর্তী কোডল্যাবগুলিতে, আপনি ভিউগুলির রেফারেন্স পেতে findViewById() ফাংশন ব্যবহার করেছেন। যখন আপনার অ্যাপে জটিল ভিউ হায়ারার্কি থাকে, তখন findViewById() ব্যয়বহুল হয় এবং অ্যাপটিকে ধীর করে দেয়, কারণ Android রুট থেকে শুরু করে ভিউ হায়ারার্কি অতিক্রম করে, যতক্ষণ না এটি পছন্দসই ভিউ খুঁজে পায়। ভাগ্যক্রমে, একটি ভাল উপায় আছে.

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

এই কোডল্যাবে, আপনি findViewById() এর প্রয়োজনীয়তা দূর করতে ডেটা বাইন্ডিং কীভাবে ব্যবহার করবেন তা শিখবেন। আপনি একটি ভিউ থেকে সরাসরি ডেটা অ্যাক্সেস করতে ডেটা বাইন্ডিং কীভাবে ব্যবহার করবেন তাও শিখবেন।

আপনি ইতিমধ্যে কি জানা উচিত

আপনার সাথে পরিচিত হওয়া উচিত:

  • একটি কার্যকলাপ কি, এবং কিভাবে onCreate() এ একটি লেআউট সহ একটি কার্যকলাপ সেট আপ করতে হয়।
  • একটি টেক্সট ভিউ তৈরি করা এবং টেক্সট ভিউ প্রদর্শন করে এমন টেক্সট সেট করা।
  • একটি ভিউ এর রেফারেন্স পেতে findViewById() ব্যবহার করে।
  • একটি দৃশ্যের জন্য একটি মৌলিক XML লেআউট তৈরি এবং সম্পাদনা করা।

আপনি কি শিখবেন

  • findViewById() এর জন্য অদক্ষ কলগুলি দূর করতে ডেটা বাইন্ডিং লাইব্রেরি কীভাবে ব্যবহার করবেন।
  • কিভাবে সরাসরি এক্সএমএল থেকে অ্যাপ ডেটা অ্যাক্সেস করবেন।

আপনি কি করবেন

  • findViewById() এর পরিবর্তে ডেটা বাইন্ডিং ব্যবহার করতে এবং লেআউট XML ফাইল থেকে সরাসরি ডেটা অ্যাক্সেস করতে একটি অ্যাপ পরিবর্তন করুন।

এই কোডল্যাবে, আপনি AboutMe অ্যাপ দিয়ে শুরু করুন এবং ডেটা বাইন্ডিং ব্যবহার করতে অ্যাপটি পরিবর্তন করুন। আপনার কাজ শেষ হয়ে গেলে অ্যাপটি ঠিক একই রকম দেখাবে!

AboutMe অ্যাপটি যা করে তা এখানে:

  • ব্যবহারকারী যখন অ্যাপটি খোলে, অ্যাপটি একটি নাম, একটি ডাকনাম প্রবেশের জন্য একটি ক্ষেত্র, একটি সম্পন্ন বোতাম, একটি তারকা চিত্র এবং স্ক্রোলযোগ্য পাঠ্য দেখায়।
  • ব্যবহারকারী একটি ডাকনাম লিখতে পারেন এবং সম্পন্ন বোতামে ট্যাপ করতে পারেন। সম্পাদনাযোগ্য ক্ষেত্র এবং বোতাম একটি পাঠ্য দৃশ্য দ্বারা প্রতিস্থাপিত হয় যা প্রবেশ করা ডাকনাম দেখায়।


আপনি আগের কোডল্যাবে তৈরি করা কোডটি ব্যবহার করতে পারেন, অথবা আপনি GitHub থেকে AboutMeDataBinding-Starter কোডটি ডাউনলোড করতে পারেন।

আগের কোডল্যাবগুলিতে আপনি যে কোডটি লিখেছেন সেটি ভিউগুলির রেফারেন্স পেতে findViewById() ফাংশন ব্যবহার করে।

ভিউ তৈরি বা পুনঃনির্মিত হওয়ার পর যখনই আপনি একটি ভিউ অনুসন্ধান করতে findViewById() ব্যবহার করেন, তখন অ্যান্ড্রয়েড সিস্টেম রানটাইমে ভিউ হায়ারার্কিটি খুঁজে বের করে। যখন আপনার অ্যাপের দেখা মাত্র কয়েক মুঠো থাকে, তখন এটি কোনো সমস্যা নয়। যাইহোক, প্রোডাকশন অ্যাপ্লিকেশানগুলির একটি লেআউটে কয়েক ডজন ভিউ থাকতে পারে এবং এমনকি সেরা ডিজাইনের সাথেও নেস্টেড ভিউ থাকবে৷

একটি রৈখিক বিন্যাসের কথা চিন্তা করুন যাতে একটি স্ক্রোল ভিউ থাকে যাতে একটি পাঠ্য দৃশ্য থাকে। একটি বৃহৎ বা গভীর দৃশ্যের অনুক্রমের জন্য, একটি ভিউ খুঁজে পেতে যথেষ্ট সময় লাগতে পারে যে এটি ব্যবহারকারীর জন্য অ্যাপটিকে লক্ষণীয়ভাবে ধীর করে দিতে পারে। ভেরিয়েবলে ভিউ ক্যাশ করা সাহায্য করতে পারে, তবে আপনাকে এখনও প্রতিটি নেমস্পেসে প্রতিটি ভিউয়ের জন্য একটি ভেরিয়েবল শুরু করতে হবে। প্রচুর ভিউ এবং একাধিক ক্রিয়াকলাপ সহ, এটিও যোগ করে।

একটি সমাধান হল একটি বস্তু তৈরি করা যাতে প্রতিটি দৃশ্যের একটি রেফারেন্স থাকে। Binding অবজেক্ট নামে পরিচিত এই বস্তুটি আপনার পুরো অ্যাপ ব্যবহার করতে পারে। এই কৌশলটিকে ডেটা বাইন্ডিং বলা হয়। একবার আপনার অ্যাপের জন্য একটি বাইন্ডিং অবজেক্ট তৈরি হয়ে গেলে, আপনি ভিউ হায়ারার্কি বা ডেটা অনুসন্ধান না করেই বাইন্ডিং অবজেক্টের মাধ্যমে ভিউ এবং অন্যান্য ডেটা অ্যাক্সেস করতে পারবেন।

ডেটা বাইন্ডিংয়ের নিম্নলিখিত সুবিধা রয়েছে:

  • findByView() ব্যবহার করে এমন কোডের তুলনায় কোড ছোট, পড়া সহজ এবং বজায় রাখা সহজ।
  • ডেটা এবং ভিউ পরিষ্কারভাবে আলাদা করা হয়েছে। এই কোর্সের পরে ডেটা বাইন্ডিংয়ের এই সুবিধাটি ক্রমবর্ধমান গুরুত্বপূর্ণ হয়ে ওঠে।
  • প্রতিটি ভিউ পাওয়ার জন্য অ্যান্ড্রয়েড সিস্টেম শুধুমাত্র একবার ভিউ হায়ারার্কি অতিক্রম করে এবং এটি অ্যাপ স্টার্টআপের সময় ঘটে, ব্যবহারকারী অ্যাপের সাথে ইন্টারঅ্যাক্ট করার সময় রানটাইমে নয়।
  • আপনি ভিউ অ্যাক্সেস করার জন্য টাইপ নিরাপত্তা পাবেন। ( টাইপ নিরাপত্তার মানে হল কম্পাইলার কম্পাইল করার সময় প্রকারগুলিকে যাচাই করে এবং আপনি যদি একটি ভেরিয়েবলে ভুল টাইপ বরাদ্দ করার চেষ্টা করেন তবে এটি একটি ত্রুটি নিক্ষেপ করে৷)

এই টাস্কে, আপনি ডেটা বাইন্ডিং সেট আপ করেন এবং আপনি বাইন্ডিং অবজেক্টে কলের সাথে findViewById() কলগুলিকে প্রতিস্থাপন করতে ডেটা বাইন্ডিং ব্যবহার করেন।

ধাপ 1: ডেটা বাইন্ডিং সক্ষম করুন

ডেটা বাইন্ডিং ব্যবহার করার জন্য, আপনাকে আপনার Gradle ফাইলে ডেটা বাইন্ডিং সক্ষম করতে হবে, কারণ এটি ডিফল্টরূপে সক্ষম নয়। কারণ ডেটা বাইন্ডিং কম্পাইলের সময় বাড়ায় এবং অ্যাপ শুরুর সময়কে প্রভাবিত করতে পারে।

  1. আপনার কাছে পূর্ববর্তী কোডল্যাব থেকে AboutMe অ্যাপ না থাকলে, GitHub থেকে AboutMeDataBinding-স্টার্টার কোড পান। অ্যান্ড্রয়েড স্টুডিওতে এটি খুলুন।
  2. build.gradle (Module: app) ফাইলটি খুলুন।
  3. android বিভাগের ভিতরে, বন্ধ বন্ধনীর আগে, একটি dataBinding বিভাগ যোগ করুন এবং true enabled করুন।
dataBinding {
    enabled = true
}
  1. যখন অনুরোধ করা হয়, প্রকল্পটি সিঙ্ক করুন। যদি আপনাকে অনুরোধ না করা হয়, তাহলে File > Gradle Files এর সাথে সিঙ্ক প্রজেক্ট নির্বাচন করুন।
  2. আপনি অ্যাপটি চালাতে পারেন, কিন্তু আপনি কোনো পরিবর্তন দেখতে পাবেন না।

ধাপ 2: ডেটা বাইন্ডিং সহ ব্যবহারযোগ্য হতে লেআউট ফাইল পরিবর্তন করুন

ডেটা বাইন্ডিংয়ের সাথে কাজ করার জন্য, আপনাকে আপনার XML লেআউটটিকে একটি <layout> ট্যাগ দিয়ে মোড়ানো দরকার। এটি যাতে রুট ক্লাসটি আর একটি ভিউ গ্রুপ নয়, বরং এটি একটি লেআউট যাতে ভিউ গ্রুপ এবং ভিউ রয়েছে। বাইন্ডিং অবজেক্ট তখন লেআউট এবং এর ভিউ সম্পর্কে জানতে পারে।

  1. activity_main.xml ফাইলটি খুলুন।
  2. টেক্সট ট্যাবে স্যুইচ করুন।
  3. <LinearLayout> এর চারপাশে সবচেয়ে বাইরের ট্যাগ হিসেবে <layout></layout> যোগ করুন।
<layout>
   <LinearLayout ... >
   ...
   </LinearLayout>
</layout>
  1. কোড ইন্ডেন্টেশন ঠিক করতে কোড > রিফরম্যাট কোড বেছে নিন।

    একটি লেআউটের জন্য নামস্থান ঘোষণাগুলি অবশ্যই বাইরের ট্যাগে থাকতে হবে৷
  1. <LinearLayout> থেকে নামস্থানের ঘোষণাগুলি কেটে <layout> ট্যাগে পেস্ট করুন। আপনার খোলার <layout> ট্যাগটি নীচের চিত্রের মতো দেখতে হবে এবং <LinearLayout> ট্যাগটিতে শুধুমাত্র দর্শন বৈশিষ্ট্য থাকা উচিত।
<layout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto">
  1. আপনি এটি সঠিকভাবে করেছেন তা যাচাই করতে আপনার অ্যাপ তৈরি করুন এবং চালান৷

ধাপ 3: প্রধান কার্যকলাপে একটি বাঁধাই বস্তু তৈরি করুন

প্রধান কার্যকলাপে বাঁধাই বস্তুর একটি রেফারেন্স যোগ করুন, যাতে আপনি ভিউ অ্যাক্সেস করতে এটি ব্যবহার করতে পারেন:

  1. MainActivity.kt ফাইলটি খুলুন।
  2. onCreate() এর আগে, উপরের স্তরে, বাইন্ডিং অবজেক্টের জন্য একটি ভেরিয়েবল তৈরি করুন। এই ভেরিয়েবলটিকে সাধারণত binding বলা হয়।

    binding ধরন, ActivityMainBinding ক্লাস, কম্পাইলার দ্বারা বিশেষভাবে এই প্রধান কার্যকলাপের জন্য তৈরি করা হয়। নামটি লেআউট ফাইলের নাম থেকে নেওয়া হয়েছে, অর্থাৎ, activity_main + Binding
private lateinit var binding: ActivityMainBinding
  1. অ্যান্ড্রয়েড স্টুডিও দ্বারা অনুরোধ করা হলে, ActivityMainBinding আমদানি করুন। যদি আপনাকে অনুরোধ না করা হয়, তাহলে ActivityMainBinding এ ক্লিক করুন এবং এই অনুপস্থিত ক্লাসটি আমদানি করতে Alt+Enter ( একটি ম্যাকে Option+Enter ) টিপুন। (আরো কীবোর্ড শর্টকাটের জন্য, কীবোর্ড শর্টকাট দেখুন।)

    import বিবৃতি নীচে দেখানো একটি অনুরূপ দেখতে হবে.
import com.example.android.aboutme.databinding.ActivityMainBinding

এর পরে, আপনি বর্তমান setContentView() ফাংশনকে একটি নির্দেশ দিয়ে প্রতিস্থাপন করুন যা নিম্নলিখিতগুলি করে:

  • বাঁধাই বস্তু তৈরি করে।
  • activity_main লেআউটকে MainActivity এর সাথে যুক্ত করতে DataBindingUtil ক্লাস থেকে setContentView() ফাংশন ব্যবহার করে। এই setContentView() ফাংশনটি ভিউগুলির জন্য কিছু ডেটা বাইন্ডিং সেটআপেরও যত্ন নেয়।
  1. onCreate() -এ, setContentView() কলটিকে নিচের কোডের লাইন দিয়ে প্রতিস্থাপন করুন।
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
  1. DataBindingUtil আমদানি করুন।
import androidx.databinding.DataBindingUtil

ধাপ 4: FindViewById() এ সমস্ত কল প্রতিস্থাপন করতে বাইন্ডিং অবজেক্ট ব্যবহার করুন

আপনি এখন বাইন্ডিং অবজেক্টে থাকা ভিউগুলির রেফারেন্স সহ findViewById() এ সমস্ত কল প্রতিস্থাপন করতে পারেন। যখন বাইন্ডিং অবজেক্ট তৈরি করা হয়, কম্পাইলার লেআউটের ভিউগুলির আইডি থেকে বাইন্ডিং অবজেক্টের ভিউগুলির নাম তৈরি করে, সেগুলিকে ক্যামেল কেসে রূপান্তর করে। সুতরাং, উদাহরণস্বরূপ, বাইন্ডিং অবজেক্টে done_button হল doneButton , nickname_edit হয়ে যায় nicknameEdit , এবং nickname_text nicknameText যায়।

  1. onCreate() -এ, বাইন্ডিং অবজেক্টের বোতামটি উল্লেখ করে এমন কোড দিয়ে done_button খুঁজে পেতে findViewById() ব্যবহার করে এমন কোডটি প্রতিস্থাপন করুন।

    এই কোডটি প্রতিস্থাপন করুন: findViewById<Button>(R.id. done_button )
    সঙ্গে: binding.doneButton

    onCreate() এ ক্লিক লিসেনার সেট করার জন্য আপনার সমাপ্ত কোডটি এইরকম হওয়া উচিত।
binding.doneButton.setOnClickListener {
   addNickname(it)
}
  1. addNickname() ফাংশনে ViewById( findViewById() খুঁজে পেতে সমস্ত কলের জন্য একই কাজ করুন।
    findViewById< View >(R.id. id_view ) এর সমস্ত ঘটনাকে binding. idView । নিম্নলিখিত উপায়ে এটি করুন:
  • findViewById() এ তাদের কল সহ editText এবং nicknameTextView TextView ভেরিয়েবলের সংজ্ঞা মুছুন। এটি আপনাকে ত্রুটি দেবে।
  • (মুছে ফেলা) ভেরিয়েবলের পরিবর্তে binding অবজেক্ট থেকে nicknameEdit nicknameText , এবং doneButton ভিউ পেয়ে ত্রুটিগুলি ঠিক করুন৷
  • view.visibility দিয়ে binding.doneButton.visibility প্রতিস্থাপন করুন। পাস-ইন view পরিবর্তে binding.doneButton ব্যবহার করা কোডটিকে আরও সামঞ্জস্যপূর্ণ করে তোলে।

    ফলাফল নিম্নলিখিত কোড:
binding.nicknameText.text = binding.nicknameEdit.text
binding.nicknameEdit.visibility = View.GONE
binding.doneButton.visibility = View.GONE
binding.nicknameText.visibility = View.VISIBLE
  • কার্যকারিতার কোন পরিবর্তন নেই। ঐচ্ছিকভাবে, আপনি এখন view প্যারামিটার মুছে ফেলতে পারেন এবং এই ফাংশনের ভিতরে binding.doneButton ব্যবহার করার জন্য view -এর সমস্ত ব্যবহার আপডেট করতে পারেন।
  1. nicknameText পাঠ্যের একটি String প্রয়োজন এবং nicknameEdit.text একটি Editable । ডেটা বাইন্ডিং ব্যবহার করার সময়, Editable একটি String -এ স্পষ্টভাবে রূপান্তর করা প্রয়োজন।
binding.nicknameText.text = binding.nicknameEdit.text.toString()
  1. আপনি ধূসর আউট আমদানি মুছে ফেলতে পারেন.
  2. apply{} ব্যবহার করে ফাংশনটি কোটলিনাইজ করুন।
binding.apply {
   nicknameText.text = nicknameEdit.text.toString()
   nicknameEdit.visibility = View.GONE
   doneButton.visibility = View.GONE
   nicknameText.visibility = View.VISIBLE
}
  1. আপনার অ্যাপ তৈরি করুন এবং চালান...এবং এটি দেখতে হবে এবং ঠিক আগের মতোই কাজ করবে।

একটি ভিউতে সরাসরি ডেটা ক্লাস উপলব্ধ করতে আপনি ডেটা বাইন্ডিংয়ের সুবিধা নিতে পারেন। এই কৌশলটি কোডটিকে সহজ করে, এবং আরও জটিল ক্ষেত্রে পরিচালনা করার জন্য অত্যন্ত মূল্যবান।

এই উদাহরণের জন্য, স্ট্রিং সংস্থান ব্যবহার করে নাম এবং ডাকনাম সেট করার পরিবর্তে, আপনি নাম এবং ডাকনামের জন্য একটি ডেটা ক্লাস তৈরি করুন। আপনি ডেটা বাইন্ডিং ব্যবহার করে ভিউতে ডেটা ক্লাস উপলব্ধ করেন।

ধাপ 1: MyName ডেটা ক্লাস তৈরি করুন

  1. java ডিরেক্টরিতে অ্যান্ড্রয়েড স্টুডিওতে, MyName.kt ফাইলটি খুলুন। আপনার কাছে এই ফাইলটি না থাকলে, একটি নতুন Kotlin ফাইল তৈরি করুন এবং এটিকে MyName.kt কল করুন।
  2. নাম এবং ডাকনামের জন্য একটি ডেটা ক্লাস সংজ্ঞায়িত করুন। ডিফল্ট মান হিসাবে খালি স্ট্রিং ব্যবহার করুন।
data class MyName(var name: String = "", var nickname: String = "")

ধাপ 2: লেআউটে ডেটা যোগ করুন

activity_main.xml ফাইলে, নামটি বর্তমানে একটি স্ট্রিং রিসোর্স থেকে একটি TextView এ সেট করা আছে। আপনাকে ডেটা ক্লাসে ডেটার রেফারেন্স দিয়ে নামের রেফারেন্স প্রতিস্থাপন করতে হবে।

  1. টেক্সট ট্যাবে activity_main.xml খুলুন।
  2. লেআউটের শীর্ষে, <layout> এবং <LinearLayout> ট্যাগের মধ্যে, একটি <data></data> ট্যাগ ঢোকান। এখানেই আপনি ভিউটিকে ডেটার সাথে সংযুক্ত করবেন।
<data>
  
</data>

ডেটা ট্যাগের ভিতরে, আপনি নামের ভেরিয়েবলগুলি ঘোষণা করতে পারেন যা একটি ক্লাসের রেফারেন্স ধারণ করে।

  1. <data> ট্যাগের ভিতরে, একটি <variable> ট্যাগ যোগ করুন।
  2. ভেরিয়েবলটিকে "myName" নাম দিতে একটি name প্যারামিটার যোগ করুন। একটি type প্যারামিটার যোগ করুন এবং MyName ডেটা ক্লাসের (প্যাকেজের নাম + পরিবর্তনশীল নাম) একটি সম্পূর্ণ যোগ্য নামে টাইপ সেট করুন।
<variable
       name="myName"
       type="com.example.android.aboutme.MyName" />

এখন, নামের জন্য স্ট্রিং রিসোর্স ব্যবহার করার পরিবর্তে, আপনি myName ভেরিয়েবলটি উল্লেখ করতে পারেন।

  1. নিচের কোড দিয়ে android:text="@string/name" প্রতিস্থাপন করুন।

@={} হল কোঁকড়া ধনুর্বন্ধনীর ভিতরে উল্লেখ করা ডেটা পাওয়ার জন্য একটি নির্দেশ।

myName আপনার পূর্বে সংজ্ঞায়িত myName ভেরিয়েবলটিকে উল্লেখ করে, যা myName ডেটা ক্লাসের দিকে নির্দেশ করে এবং ক্লাস থেকে name বৈশিষ্ট্য নিয়ে আসে।

android:text="@={myName.name}"

ধাপ 3: ডেটা তৈরি করুন

এখন আপনার লেআউট ফাইলের ডেটার একটি রেফারেন্স আছে। এর পরে, আপনি প্রকৃত ডেটা তৈরি করুন।

  1. MainActivity.kt ফাইলটি খুলুন।
  2. onCreate() উপরে, একটি প্রাইভেট ভেরিয়েবল তৈরি করুন, যাকে কনভেনশন দ্বারা myName ও বলা হয়। ভেরিয়েবলটিকে MyName ডেটা ক্লাসের একটি উদাহরণ বরাদ্দ করুন, নামে পাস করে।
private val myName: MyName = MyName("Aleks Haecky")
  1. onCreate() এ, লেআউট ফাইলে myName myName মান নির্ধারণ করুন যা আপনি এইমাত্র ঘোষণা করেছেন। আপনি সরাসরি XML-এ ভেরিয়েবল অ্যাক্সেস করতে পারবেন না। আপনাকে বাইন্ডিং অবজেক্টের মাধ্যমে এটি অ্যাক্সেস করতে হবে।
binding.myName = myName
  1. এটি একটি ত্রুটি দেখাতে পারে, কারণ পরিবর্তন করার পরে আপনাকে বাইন্ডিং অবজেক্টটি রিফ্রেশ করতে হবে। আপনার অ্যাপ তৈরি করুন, এবং ত্রুটি দূরে যেতে হবে।

ধাপ 4: TextView-এ ডাকনামের জন্য ডেটা ক্লাস ব্যবহার করুন

চূড়ান্ত ধাপ হল TextView এ ডাকনামের জন্য ডেটা ক্লাস ব্যবহার করা।

  1. activity_main.xml খুলুন।
  2. nickname_text টেক্সট ভিউতে, একটি text প্রোপার্টি যোগ করুন। নীচে দেখানো হিসাবে, ডেটা ক্লাসে nickname উল্লেখ করুন।
android:text="@={myName.nickname}"
  1. ActivityMain এ, প্রতিস্থাপন করুন
    nicknameText.text = nicknameEdit.text.toString()
    কোড সহ myName ভেরিয়েবলে ডাকনাম সেট করুন।
myName?.nickname = nicknameEdit.text.toString()

ডাকনাম সেট করার পরে, আপনি আপনার কোডটি নতুন ডেটা সহ UI রিফ্রেশ করতে চান৷ এটি করার জন্য, আপনাকে অবশ্যই সমস্ত বাইন্ডিং এক্সপ্রেশনগুলিকে বাতিল করতে হবে যাতে সেগুলি সঠিক ডেটা দিয়ে পুনরায় তৈরি করা হয়।

  1. ডাকনাম সেট করার পরে invalidateAll() যোগ করুন যাতে UI আপডেট করা বাইন্ডিং অবজেক্টের মান সহ রিফ্রেশ হয়।
binding.apply {
   myName?.nickname = nicknameEdit.text.toString()
   invalidateAll()
   ...
}
  1. আপনার অ্যাপ তৈরি করুন এবং চালান এবং এটি ঠিক আগের মতোই কাজ করবে।

অ্যান্ড্রয়েড স্টুডিও প্রকল্প: MeDataBinding সম্পর্কে

findViewById() এ কল প্রতিস্থাপন করতে ডেটা বাইন্ডিং ব্যবহার করার পদক্ষেপ:

  1. build.gradle ফাইলের android বিভাগে ডেটা বাইন্ডিং সক্ষম করুন:
    dataBinding { enabled = true }
  2. আপনার XML লেআউটে রুট ভিউ হিসেবে <layout> ব্যবহার করুন।
  3. একটি বাঁধাই পরিবর্তনশীল সংজ্ঞায়িত করুন:
    private lateinit var binding: ActivityMainBinding
  4. MainActivity একটি বাঁধাই বস্তু তৈরি করুন, setContentView প্রতিস্থাপন করুন:
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
  5. বাইন্ডিং অবজেক্টের ভিউ এর রেফারেন্স সহ findViewById() এ কলগুলি প্রতিস্থাপন করুন। উদাহরণ স্বরূপ:
    findViewById<Button>(R.id.done_button) ⇒ binding.doneBu tton
    (উদাহরণস্বরূপ, XML-এ ভিউ এর id থেকে ভিউটির নাম উটের কেস তৈরি করা হয়েছে।)

ডেটাতে ভিউ বাঁধাই করার পদক্ষেপ:

  1. আপনার ডেটার জন্য একটি ডেটা ক্লাস তৈরি করুন।
  2. <layout> ট্যাগের ভিতরে একটি <data> ব্লক যোগ করুন।
  3. একটি নাম সহ একটি <variable> সংজ্ঞায়িত করুন, এবং একটি প্রকার যা ডেটা ক্লাস।
<data>
   <variable
       name="myName"
       type="com.example.android.aboutme.MyName" />
</data>
  1. MainActivity এ, ডেটা ক্লাসের একটি উদাহরণ সহ একটি ভেরিয়েবল তৈরি করুন। উদাহরণ স্বরূপ:
    private val myName: MyName = MyName("Aleks Haecky")
  1. বাইন্ডিং অবজেক্টে, আপনি যে ভেরিয়েবলটি তৈরি করেছেন তাতে ভেরিয়েবল সেট করুন:
    binding.myName = myName
  1. XML-এ, আপনি <data> ব্লকে সংজ্ঞায়িত ভেরিয়েবলে ভিউয়ের বিষয়বস্তু সেট করুন। ডেটা ক্লাসের ভিতরে ডেটা অ্যাক্সেস করতে ডট নোটেশন ব্যবহার করুন।
    android:text="@={myName.name}"

উদাসীনতা কোর্স:

অ্যান্ড্রয়েড বিকাশকারী ডকুমেন্টেশন:

এই বিভাগে একজন প্রশিক্ষকের নেতৃত্বে একটি কোর্সের অংশ হিসাবে এই কোডল্যাবের মাধ্যমে কাজ করা শিক্ষার্থীদের জন্য সম্ভাব্য হোমওয়ার্ক অ্যাসাইনমেন্ট তালিকাভুক্ত করা হয়েছে। নিম্নলিখিতগুলি করা প্রশিক্ষকের উপর নির্ভর করে:

  • প্রয়োজনে হোমওয়ার্ক বরাদ্দ করুন।
  • শিক্ষার্থীদের সাথে যোগাযোগ করুন কিভাবে হোমওয়ার্ক অ্যাসাইনমেন্ট জমা দিতে হয়।
  • হোমওয়ার্ক অ্যাসাইনমেন্ট গ্রেড.

প্রশিক্ষকরা এই পরামর্শগুলিকে তারা যতটা কম বা যতটা চান ব্যবহার করতে পারেন, এবং তাদের উপযুক্ত মনে করে অন্য কোনও হোমওয়ার্ক বরাদ্দ করতে নির্দ্বিধায় করা উচিত।

আপনি যদি নিজে থেকে এই কোডল্যাবের মাধ্যমে কাজ করে থাকেন, তাহলে আপনার জ্ঞান পরীক্ষা করার জন্য এই হোমওয়ার্ক অ্যাসাইনমেন্টগুলি ব্যবহার করুন।

এই প্রশ্নগুলোর উত্তর দাও

প্রশ্ন 1

আপনি কেন findViewById() খুঁজতে স্পষ্ট এবং অন্তর্নিহিত কলগুলি কমিয়ে আনতে চান?

  • প্রতিবার findViewById() করা হলে, এটি ভিউ হায়ারার্কি অতিক্রম করে।
  • findViewById() প্রধান বা UI থ্রেডে চলে।
  • এই কলগুলি ব্যবহারকারীর ইন্টারফেসকে ধীর করে দিতে পারে।
  • আপনার অ্যাপ ক্র্যাশ হওয়ার সম্ভাবনা কম।

প্রশ্ন 2

আপনি কিভাবে ডেটা বাইন্ডিং বর্ণনা করবেন?

উদাহরণস্বরূপ, এখানে কিছু জিনিস রয়েছে যা আপনি ডেটা বাইন্ডিং সম্পর্কে বলতে পারেন:

  • ডেটা বাইন্ডিং সম্পর্কে বড় ধারণা হল এমন একটি অবজেক্ট তৈরি করা যা কম্পাইলের সময় দূরবর্তী তথ্যের দুটি টুকরোকে একত্রে সংযুক্ত/মানচিত্র/আবদ্ধ করে, যাতে আপনাকে রানটাইমে ডেটা খুঁজতে না হয়।
  • যে বস্তুটি এই বাইন্ডিংগুলিকে আপনার কাছে প্রকাশ করে তাকে বাইন্ডিং অবজেক্ট বলে।
  • বাইন্ডিং অবজেক্ট কম্পাইলার দ্বারা তৈরি করা হয়।

প্রশ্ন 3

নিচের কোনটি ডেটা বাইন্ডিংয়ের সুবিধা নয়?

  • কোড সংক্ষিপ্ত, পড়া সহজ এবং বজায় রাখা সহজ।
  • ডেটা এবং ভিউ পরিষ্কারভাবে আলাদা করা হয়েছে।
  • প্রতিটি ভিউ পাওয়ার জন্য অ্যান্ড্রয়েড সিস্টেম শুধুমাত্র একবার ভিউ হায়ারার্কি অতিক্রম করে।
  • findViewById() কল করা একটি কম্পাইলার ত্রুটি তৈরি করে।
  • ভিউ অ্যাক্সেসের জন্য নিরাপত্তা টাইপ করুন

প্রশ্ন 4

<layout> ট্যাগের কাজ কী?

  • আপনি লেআউটে আপনার রুট ভিউ এর চারপাশে এটি মোড়ানো।
  • একটি বিন্যাসে সমস্ত দৃশ্যের জন্য বাইন্ডিং তৈরি করা হয়।
  • এটি একটি XML লেআউটে শীর্ষ-স্তরের ভিউ নির্ধারণ করে যা ডেটা বাইন্ডিং ব্যবহার করে।
  • আপনি একটি ডাটা ক্লাসের সাথে একটি ভেরিয়েবল আবদ্ধ করতে <layout> এর ভিতরে <data> ট্যাগ ব্যবহার করতে পারেন।

প্রশ্ন 5

XML লেআউটে আবদ্ধ ডেটা রেফারেন্স করার সঠিক উপায় কোনটি?

  • android:text="@={myDataClass.property}"
  • android:text="@={myDataClass}"
  • android:text="@={myDataClass.property.toString()}"
  • android:text="@={myDataClass.bound_data.property}"

পরবর্তী পাঠ শুরু করুন: 3.1: একটি খণ্ড তৈরি করুন

এই কোর্সে অন্যান্য কোডল্যাবগুলির লিঙ্কগুলির জন্য, Android Kotlin Fundamentals codelabs ল্যান্ডিং পৃষ্ঠাটি দেখুন।