Data pass via Intent ( Android Bangla Tutorial - )
এই পর্বে আমরা দেখবো কিভাবে এক Activity থেকে ডাটা নিয়ে অন্য Activity তে দেখানো যায় ।
এ জন্য প্রথমে ২ টা Activity ক্লাস তৈরি করে ফেলুন । Activityক্লাস কিভাবে তৈরি করে তা আগের পর্বগুলোতে আমরা দেখেছি । আমি তৈরি করলাম MainActivity এবং Main2Activity নামে ।
এখন activity_main.xml এ -
এখানে ২ টা EditText নিলাম কেননা আমরা ইউজার থেকে ২ টা বিষয় ইনপুট নিয়ে সেটা অন্য Activity নিয়ে যাবো , আর সেই প্রসেসিং টা হবে যখন আমরা একটা বাটনে ক্লিক করবো , তাই একটি বাটনও নিলাম ।
এবার দ্বিতীয় Activity তে ২ টা TextView নিব কারন প্রথম Activity থেকে পাওয়া শব্দ ২ টি ইউজারকে দেখানোর জন্য । TextView দ্বারা কোন লেখা ইউজারকে দেখানো হয় এবং EditText দ্বারা ইউজার থেকে ইনপুট নেয়া হয় , তাই প্রথম এ Activity থেকে EditText এর মাধ্যমে যে ইনপুট ২ টি নিলাম সেই দুটি ইনপুট দ্বিতীয় Activity দেখানোর জন্য আমরা TextView ইউজ করবো ।
তাহলে দ্বিতীয় Activity 'র ডিজাইন টা হবে -
এখানে আমরা ডিজাইন এর কোন কিছু বর্ণনা করলাম নাহ কেননা এখানে যে ট্যাগ গুলো ইউজ করা হয়েছে তার ব্যাবহার সম্পর্কে আমরা আগেই জেনে আসছি 😊
এবার তাহলে জাভা ক্লাসে যাওয়া যাক -
প্রথমে
EditText nameET, ageET ;
ইউজার থেকে ইনপুট নেয়ার জন্য EditText ক্লাসের ২টী অব্জেক্ট তৈরি করলাম
String name_key="com.example.user.hackday_name",age_key ="com.example.user.hackday_phone"
আমরা ২ টি ইনপুট এক activity থেকে আরেক activity তে নিয়ে যাবো তাই এই ২টি ইনপুট যে একই সূত্রে বাধা সেটা বাঁধতেই তাদের প্রত্যেককে একটি key দিয়ে দিব । ২য় activity তে এই key এর রেফারেন্স ধরেই আবার তাদের ২টি TextView তে বসিয়ে দিব । এটা অনেকটা এইরকম যে আমরা যখন ব্লুটুথ এর মাধ্যমে কোন ফাইল আদান-প্রদান করতাম তখন পেয়ার করার জন্য ২ টি ডিভাইস এই ১-২ টি সংখ্যা দিয়ে বুঝিয়ে দিতাম যে এই ডিভাইস দুটির মাঝে ফাইল আদান-প্রদান করা হবে । আর এখানে com.example.user.hackday_name এত বড় key নেয়ার কারন এই key সর্বদা ইউনিক হতে হবে, আর যেহেতু প্যাকেজ নাম সর্বদা ইউনিক থাকে তাই আমাদের প্যাকেজ এর নাম বসিয়ে দিলাম যা com.example.user.hackday , এরপর একটি কিছু লিখে দিলাম ।
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
একটি অ্যাপ পরিচালনার ৬টি লাইফ-সাইকেল আছে । এর ভিতর onCreate একটি । লাইফ-সাইকেল নিয়ে অন্য কোন পর্বে আলাদা ভাবে আলোচনা করা হবে । এখানে onCreate এর ভিতর savedInstanceState দেয়ার কারন হল , ধরি যে কোন সময় ইউজার আমাদের অ্যাপ থেকে কিছু সময়ের জন্য অন্য অ্যাপে চলে গেল , ধরলাম তার একটি ফোন আসলো । তাতে আমাদের অ্যাপটি কিন্তু pause হয়ে গেল । এরপর যখন আবার ইউজার ফোন কল কাটার পর আমাদের অ্যাপে ফিরে আসবে তখন সে লাস্ট যে স্ক্রিনটি দেখতেছিল সেটাই আবার তাকে দেখাতে হবে । তাই সেই স্ক্রিন টি সেভ করে রাখার জন্য savedInstanceState ব্যাবহার করা হয় । আবার ধরি আমরা একটি রেজিস্ট্রেশন ফাইল পূরণ করছি , কিছু ডাটা দেয়ার পর আমরা মোবাইল টা রোটেড করলাম তখন কিন্তু অ্যাপ আবার নতুন করে শুরু হয় । যখনই আমরা মোবাইল রোটেড করি তখন ই অ্যাপ নতুন করে আবার onCreate ম্যাথড হয়ে সব কিছু শুরু করে । এখন ইউজার যে কোন সময় মোবাইল রোডেট করতে পারে । আর তার ফলে যদি অ্যাপ নতুন করে ওপেন হয়ে তাকে আবার আগের ডাটাগুলো লিখে রেজিস্ট্রেশন করতে হয় , তাহলে ইউজার বিরক্ত হবে । তাই সে যে পরিমান ডাটা কিংবা কোন গেমের যে লেভেলে যে ভাবে থাকা অবস্থায় সে মোবাইল রোডেট করেছে মুহূর্তেই অ্যাপটিকে সেই অবস্থাতেই ধরে রাখার জন্য savedInstanceState ব্যাবহার করা হয় ।
setContentView(R.layout.activity_main);
অ্যাপটি চালু হবার পর সে যে ভিউ ডিজাইন টি দেখতে পাবে সেটি লিখে দিলাম
nameET = findViewById(R.id.nameET);
ageET = findViewById(R.id.ageET);
এখানে একদম উপরে EditText ক্লাসের যে ২টী অব্জেক্ট তৈরি করেছিলাম তার সাথে আমাদের layout ফাইলে দেয়া EditText এর ভিউ ২টির আইডি যোগ করে দিলাম অর্থাৎ তাদের মাঝে রিলেশন তৈরি করে দিলাম ।
}
public void buttonClickEvent(View view) {
String name = nameET.getText().toString();
String age = ageET.getText().toString();
আমরা ইউজার থেকে EditText এর মাধ্যমে যে ইনপুট ২টি পাবো তা ২টি String ভ্যারিয়েবল এ রেখে দিলাম । এখানে toString() হল ভিউতে যে ইনপুট দিচ্ছি তা যেহেতু String আকারে নিয়ে আমরা অন্য কোন কাজ করবো তাই সেটি String এ কনভার্ট করার জন্য।
Intent intent = new Intent(getApplicationContext().Main2Activity.class);
আমরা আগের পর্বেই শিখে এক Activity থেকে অন্য Activity তে যাওয়ার জন্য Intent ব্যাবহার করা হয় । এখানে সেটিই নির্দেশনা দিয়ে দিলাম আমরা কোন Activity থেকে কোন Activity তে যেতে চাই ।
intent.putExtra(name_key,name);
intent.putExtra(age_key,age);
Intent এর মাধ্যমে যখন আমরা ডাটা পাস করবো তখন putExtra ম্যাথড টি ব্যাবহার করতে হবে । ম্যাথডের ভিতর কি-ভ্যালু পেয়ার দিয়ে ডাটা পাস করতে হয় । তাই প্রথমে একদম উপরে দেয়া key নাম এবং ভ্যালু যেখানে রাখা আছে সেই ভ্যারিয়েবল টি দিয়ে দিলাম ।
startActivity(intent);
এই Activity তে আমাদের সকল ফাংশন করা শেষ তাই এই buttonClickEvent ম্যাথড কল করলে নতুন যে Activity তে চলে যাবে সেটি কল করে দিলাম ।
}
এরপর আমরা দেখবো দ্বিতীয় Activity তে প্রথম Activity থেকে পাওয়া ডাটা কিভাবে দেখানো যায় -
দ্বিতীয় Activity এর ডিজাইন টা আমরা আগেই করে ফেলছি । এখন ডিজাইনের ব্যাকগ্রাউন্ডে যে কাজ তা নিয়ে আলোচনা করা যাক -
String name_key="com.example.user.hackday_name",age_key ="com.example.user.hackday_phone"
প্রথম Activity থেক পাওয়া ভ্যালু রিসিভ করার জন্য একই key গুলো লিখলাম
ব্যাস আজকের পর্বের এখানেই সমাপ্তি, ভালো থাকবেন সবাই 😊
এখন activity_main.xml এ -
এখানে ২ টা EditText নিলাম কেননা আমরা ইউজার থেকে ২ টা বিষয় ইনপুট নিয়ে সেটা অন্য Activity নিয়ে যাবো , আর সেই প্রসেসিং টা হবে যখন আমরা একটা বাটনে ক্লিক করবো , তাই একটি বাটনও নিলাম ।
এবার দ্বিতীয় Activity তে ২ টা TextView নিব কারন প্রথম Activity থেকে পাওয়া শব্দ ২ টি ইউজারকে দেখানোর জন্য । TextView দ্বারা কোন লেখা ইউজারকে দেখানো হয় এবং EditText দ্বারা ইউজার থেকে ইনপুট নেয়া হয় , তাই প্রথম এ Activity থেকে EditText এর মাধ্যমে যে ইনপুট ২ টি নিলাম সেই দুটি ইনপুট দ্বিতীয় Activity দেখানোর জন্য আমরা TextView ইউজ করবো ।
তাহলে দ্বিতীয় Activity 'র ডিজাইন টা হবে -
এখানে আমরা ডিজাইন এর কোন কিছু বর্ণনা করলাম নাহ কেননা এখানে যে ট্যাগ গুলো ইউজ করা হয়েছে তার ব্যাবহার সম্পর্কে আমরা আগেই জেনে আসছি 😊
এবার তাহলে জাভা ক্লাসে যাওয়া যাক -
প্রথমে
EditText nameET, ageET ;
ইউজার থেকে ইনপুট নেয়ার জন্য EditText ক্লাসের ২টী অব্জেক্ট তৈরি করলাম
String name_key="com.example.user.hackday_name",age_key ="com.example.user.hackday_phone"
আমরা ২ টি ইনপুট এক activity থেকে আরেক activity তে নিয়ে যাবো তাই এই ২টি ইনপুট যে একই সূত্রে বাধা সেটা বাঁধতেই তাদের প্রত্যেককে একটি key দিয়ে দিব । ২য় activity তে এই key এর রেফারেন্স ধরেই আবার তাদের ২টি TextView তে বসিয়ে দিব । এটা অনেকটা এইরকম যে আমরা যখন ব্লুটুথ এর মাধ্যমে কোন ফাইল আদান-প্রদান করতাম তখন পেয়ার করার জন্য ২ টি ডিভাইস এই ১-২ টি সংখ্যা দিয়ে বুঝিয়ে দিতাম যে এই ডিভাইস দুটির মাঝে ফাইল আদান-প্রদান করা হবে । আর এখানে com.example.user.hackday_name এত বড় key নেয়ার কারন এই key সর্বদা ইউনিক হতে হবে, আর যেহেতু প্যাকেজ নাম সর্বদা ইউনিক থাকে তাই আমাদের প্যাকেজ এর নাম বসিয়ে দিলাম যা com.example.user.hackday , এরপর একটি কিছু লিখে দিলাম ।
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
একটি অ্যাপ পরিচালনার ৬টি লাইফ-সাইকেল আছে । এর ভিতর onCreate একটি । লাইফ-সাইকেল নিয়ে অন্য কোন পর্বে আলাদা ভাবে আলোচনা করা হবে । এখানে onCreate এর ভিতর savedInstanceState দেয়ার কারন হল , ধরি যে কোন সময় ইউজার আমাদের অ্যাপ থেকে কিছু সময়ের জন্য অন্য অ্যাপে চলে গেল , ধরলাম তার একটি ফোন আসলো । তাতে আমাদের অ্যাপটি কিন্তু pause হয়ে গেল । এরপর যখন আবার ইউজার ফোন কল কাটার পর আমাদের অ্যাপে ফিরে আসবে তখন সে লাস্ট যে স্ক্রিনটি দেখতেছিল সেটাই আবার তাকে দেখাতে হবে । তাই সেই স্ক্রিন টি সেভ করে রাখার জন্য savedInstanceState ব্যাবহার করা হয় । আবার ধরি আমরা একটি রেজিস্ট্রেশন ফাইল পূরণ করছি , কিছু ডাটা দেয়ার পর আমরা মোবাইল টা রোটেড করলাম তখন কিন্তু অ্যাপ আবার নতুন করে শুরু হয় । যখনই আমরা মোবাইল রোটেড করি তখন ই অ্যাপ নতুন করে আবার onCreate ম্যাথড হয়ে সব কিছু শুরু করে । এখন ইউজার যে কোন সময় মোবাইল রোডেট করতে পারে । আর তার ফলে যদি অ্যাপ নতুন করে ওপেন হয়ে তাকে আবার আগের ডাটাগুলো লিখে রেজিস্ট্রেশন করতে হয় , তাহলে ইউজার বিরক্ত হবে । তাই সে যে পরিমান ডাটা কিংবা কোন গেমের যে লেভেলে যে ভাবে থাকা অবস্থায় সে মোবাইল রোডেট করেছে মুহূর্তেই অ্যাপটিকে সেই অবস্থাতেই ধরে রাখার জন্য savedInstanceState ব্যাবহার করা হয় ।
setContentView(R.layout.activity_main);
অ্যাপটি চালু হবার পর সে যে ভিউ ডিজাইন টি দেখতে পাবে সেটি লিখে দিলাম
nameET = findViewById(R.id.nameET);
ageET = findViewById(R.id.ageET);
এখানে একদম উপরে EditText ক্লাসের যে ২টী অব্জেক্ট তৈরি করেছিলাম তার সাথে আমাদের layout ফাইলে দেয়া EditText এর ভিউ ২টির আইডি যোগ করে দিলাম অর্থাৎ তাদের মাঝে রিলেশন তৈরি করে দিলাম ।
}
public void buttonClickEvent(View view) {
String name = nameET.getText().toString();
String age = ageET.getText().toString();
আমরা ইউজার থেকে EditText এর মাধ্যমে যে ইনপুট ২টি পাবো তা ২টি String ভ্যারিয়েবল এ রেখে দিলাম । এখানে toString() হল ভিউতে যে ইনপুট দিচ্ছি তা যেহেতু String আকারে নিয়ে আমরা অন্য কোন কাজ করবো তাই সেটি String এ কনভার্ট করার জন্য।
Intent intent = new Intent(getApplicationContext().Main2Activity.class);
আমরা আগের পর্বেই শিখে এক Activity থেকে অন্য Activity তে যাওয়ার জন্য Intent ব্যাবহার করা হয় । এখানে সেটিই নির্দেশনা দিয়ে দিলাম আমরা কোন Activity থেকে কোন Activity তে যেতে চাই ।
intent.putExtra(name_key,name);
intent.putExtra(age_key,age);
Intent এর মাধ্যমে যখন আমরা ডাটা পাস করবো তখন putExtra ম্যাথড টি ব্যাবহার করতে হবে । ম্যাথডের ভিতর কি-ভ্যালু পেয়ার দিয়ে ডাটা পাস করতে হয় । তাই প্রথমে একদম উপরে দেয়া key নাম এবং ভ্যালু যেখানে রাখা আছে সেই ভ্যারিয়েবল টি দিয়ে দিলাম ।
startActivity(intent);
এই Activity তে আমাদের সকল ফাংশন করা শেষ তাই এই buttonClickEvent ম্যাথড কল করলে নতুন যে Activity তে চলে যাবে সেটি কল করে দিলাম ।
}
এরপর আমরা দেখবো দ্বিতীয় Activity তে প্রথম Activity থেকে পাওয়া ডাটা কিভাবে দেখানো যায় -
দ্বিতীয় Activity এর ডিজাইন টা আমরা আগেই করে ফেলছি । এখন ডিজাইনের ব্যাকগ্রাউন্ডে যে কাজ তা নিয়ে আলোচনা করা যাক -
String name_key="com.example.user.hackday_name",age_key ="com.example.user.hackday_phone"
প্রথম Activity থেক পাওয়া ভ্যালু রিসিভ করার জন্য একই key গুলো লিখলাম
TextView nameTV,ageTV;
ভ্যালুগুলো শো করানোর জন্য দুইটি TextView এর অব্জেক্ট তৈরি করলাম
ভ্যালুগুলো শো করানোর জন্য দুইটি TextView এর অব্জেক্ট তৈরি করলাম
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
nameTv = findViewById(R.id.nameTv);
ageTv = findViewById(R.id.ageTv);
আগের মতই ডিজাইন এর আইডির সাথে সম্পর্ক স্থাপন করে দিলাম
Intent intent = getIntent();
Intent এর মাধ্যমে এক Activity থেকে অন্য Activity তে কোন কাজ করার জন্য getIntent() ম্যাথড ব্যাবহার করতে হয় । যেহেতু আমরা Intent এর মাধ্যমে ডাটা নিয়ে আসতেছি তাই এখানে Intent এর একটি অব্জেক্ট তৈরি করে getIntent() ম্যাথড দিয়ে দিলাম ।
String name = intent.getStringExtra(name_key);
String age = intent.getStringExtra(age_key);
ডাটা যখন পাস হয়ে আসবে তখন সেটি String আকারে আসে নাহ , তাই intent এর সাথে যা আসছে তা String এ কনভার্ট করে নিয়ে একটি ভ্যারিয়েবল এ রেখে দিলাম।
nameTV.setText(name);
ageTV.setText(age);
এবার সেই ভ্যালু দু'টি TextView এর ভিতর সেট করে দিলাম ।
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
nameTv = findViewById(R.id.nameTv);
ageTv = findViewById(R.id.ageTv);
আগের মতই ডিজাইন এর আইডির সাথে সম্পর্ক স্থাপন করে দিলাম
Intent intent = getIntent();
Intent এর মাধ্যমে এক Activity থেকে অন্য Activity তে কোন কাজ করার জন্য getIntent() ম্যাথড ব্যাবহার করতে হয় । যেহেতু আমরা Intent এর মাধ্যমে ডাটা নিয়ে আসতেছি তাই এখানে Intent এর একটি অব্জেক্ট তৈরি করে getIntent() ম্যাথড দিয়ে দিলাম ।
String name = intent.getStringExtra(name_key);
String age = intent.getStringExtra(age_key);
ডাটা যখন পাস হয়ে আসবে তখন সেটি String আকারে আসে নাহ , তাই intent এর সাথে যা আসছে তা String এ কনভার্ট করে নিয়ে একটি ভ্যারিয়েবল এ রেখে দিলাম।
nameTV.setText(name);
ageTV.setText(age);
এবার সেই ভ্যালু দু'টি TextView এর ভিতর সেট করে দিলাম ।
}
}
ব্যাস আজকের পর্বের এখানেই সমাপ্তি, ভালো থাকবেন সবাই 😊
মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন