অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে একটি "বান্ডেল" কী


উত্তর:


278

বিভিন্ন অ্যান্ড্রয়েড ক্রিয়াকলাপের মধ্যে ডেটা পাস করার জন্য বান্ডিলগুলি সাধারণত ব্যবহৃত হয়। এটি আপনার উপর নির্ভর করে আপনি কী ধরণের মান পাস করতে চান তবে বান্ডিলগুলি সমস্ত ধরণের মান ধরে রাখতে এবং এটিকে নতুন ক্রিয়াকলাপে প্রেরণ করতে পারে।

আপনি এটি এর মতো ব্যবহার করতে পারেন:

Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);  
startActivity(intent);

আপনি এইগুলি দ্বারা পাস করা মানগুলি পেতে পারেন:

Bundle extras = intent.getExtras(); 
String tmp = extras.getString("myKey");

আপনি এখানে আরও তথ্য পেতে পারেন:


3
কেন কেবল সরাসরি System.object এবং castালাই ব্যবহার করবেন না?
লাভস্প্রিং

78

ক্রিয়াকলাপBundle এবং Intentবস্তু ব্যবহার করে ক্রিয়াকলাপের মধ্যে ডেটা পাস করুন


আপনার প্রথম কোনও Bundleবস্তু তৈরি করুন

Bundle b = new Bundle();

তারপরে, anystringবান্ডেল কী দিয়ে সঞ্চিত স্ট্রিং ডেটা যুক্ত করুন"myname"

b.putString("myname", anystring);

এখন, একটি Intentঅবজেক্ট তৈরি করুন

Intent in = new Intent(getApplicationContext(), secondActivity.class);

bউদ্দেশ্য হিসাবে বান্ডিল বস্তু পাস

in.putExtras(b);

এবং দ্বিতীয় ক্রিয়াকলাপ শুরু করুন

startActivity(in);

দ্বিতীয় ক্রিয়াকলাপে, আমাদের প্রথম ক্রিয়াকলাপ থেকে পাস করা ডেটা অ্যাক্সেস করতে হবে

Intent in = getIntent();

এখন, আপনাকে বান্ডিল থেকে ডেটা নেওয়া দরকার

Bundle b = in.getExtras();

অবশেষে, নামের কীটির সাথে যুক্ত স্ট্রিং ডেটার মানটি পান "myname"

String s = b.getString("myname");

এটি সত্যিই উত্তম ভারবস উত্তর রয়েছে, তার জন্য ধন্যবাদ।
অভিষেক গার্গ

67

আমাকে যুক্ত করতে হবে যে ভবিষ্যতে নিজের কাছে ডেটা প্রেরণে ক্রিয়াকলাপ দ্বারা বান্ডিলগুলি ব্যবহার করা হয়।

যখন স্ক্রিনটি ঘোরানো হয়, বা অন্য কোনও ক্রিয়াকলাপ শুরু হয়, তখন পদ্ধতিটি protected void onSaveInstanceState(Bundle outState)আহ্বান করা হয় এবং ক্রিয়াকলাপটি বিনষ্ট হয়। পরে, ক্রিয়াকলাপের আরেকটি উদাহরণ তৈরি করা হয় এবং public void onCreate(Bundle savedInstanceState)তাকে ডাকা হয়। ক্রিয়াকলাপের প্রথম উদাহরণটি তৈরি করা হলে, বান্ডিলটি শূন্য হয়; এবং যদি বান্ডিলটি শূন্য না হয় তবে ক্রিয়াকলাপটি তার পূর্বসূর দ্বারা শুরু করা কিছু ব্যবসা অব্যাহত রাখে।

অ্যান্ড্রয়েড স্বয়ংক্রিয়ভাবে পাঠ্য ক্ষেত্রগুলিতে পাঠ্যটি সংরক্ষণ করে, তবে এটি সবকিছু সংরক্ষণ করে না এবং সূক্ষ্ম বাগগুলি মাঝে মাঝে উপস্থিত হয়।

সর্বাধিক সাধারণ অ্যান্টি-প্যাটার্নটি ধরে নিচ্ছে যে onCreate()এটি কেবল আরম্ভ করে। এটি ভুল, কারণ এটি অবশ্যই রাষ্ট্র পুনরুদ্ধার করতে হবে।

এই "ঘূর্ণায়নের উপর পুনরায় ক্রিয়াকলাপ" আচরণটি অক্ষম করার একটি বিকল্প রয়েছে, তবে এটি পুনরায় আরম্ভ হওয়া বাগগুলি আটকাবে না, এটি কেবল তাদের উল্লেখ করা আরও কঠিন করে তুলবে।

আরও মনে রাখবেন যে ক্রিয়াকলাপটি ধ্বংস হতে চলেছে এমন একমাত্র পদ্ধতি যার কলটি গ্যারান্টিযুক্ত onPause()। (ডক্সে ক্রিয়াকলাপের জীবনচক্র গ্রাফটি দেখুন See)


আমরা যদি কেবল ম্যাপিং ব্যবহার করতে পারি তবে কেন একটি বান্ডেল ব্যবহার করবেন? ধন্যবাদ টেড!
রুচির বড়োনিয়া

4
বান্ডিলটি কেবল ক্রিয়াকলাপ দ্বারা ব্যবহৃত হয় না। এটি টুকরা দ্বারা ঘোরাঘুরির পরে রাজ্যগুলি সংরক্ষণের জন্য ব্যবহৃত হয়।
কাই ওয়াং

47

Bundleজাভা Mapঅবজেক্টের মতো একটি যা Stringমানগুলির কীগুলি ম্যাপ করে । এটি ক্রিয়াকলাপ এবং অন্যান্য অ্যাপ্লিকেশন উপাদানগুলির মধ্যে তথ্য পাস করার জন্য ব্যবহৃত হয়। এটি রাষ্ট্রীয় তথ্য ক্যাপচার এবং পুনরুদ্ধার করতে কাঠামোর দ্বারাও ব্যবহৃত হয়।

অ্যান্ড্রয়েড এর জন্য সরল পুরানো Mapঅবজেক্টগুলি ব্যবহার না করার কারণ Mapএটি খুব নমনীয়; এটিতে অবজেক্টস থাকতে পারে (যেমন, বলুন, I / O স্ট্রিম) যা সিরিয়ালাইজ করা যায় না। Bundleএপিআই যে বস্তু এমনভাবে বান্ডিল এর বিষয়বস্তু serializable হতে নিশ্চিত করা হয় একটি বান্ডিল যোগ করা যেতে পারে ধরনের নিষিদ্ধ। অ্যান্ড্রয়েড কাঠামো এই সম্পত্তি উপর নির্ভর করে।

আমি পরামর্শ দিচ্ছি যে আপনি অ্যাপ্লিকেশন ফান্ডামেন্টালগুলিতে ডকুমেন্টেশনটি পড়ুন । এটি ব্যাখ্যা করে, অন্যান্য জিনিসগুলির মধ্যে, কী কী বান্ডিল এবং উদ্দেশ্যগুলি এবং সেগুলি কী জন্য ব্যবহৃত হয়।


14

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

বান্ডিলগুলি কী-মানযুক্ত ম্যাপিংস, সুতরাং কোনও উপায়ে তারা হ্যাশের মতো হয় তবে সেগুলি কেবল একটি স্ট্রিং / ফু ফু অবজেক্ট ম্যাপিংয়ের মধ্যে সীমাবদ্ধ নয়। মনে রাখবেন যে কেবলমাত্র নির্দিষ্ট ডেটা ধরণেরগুলি "পার্সেলেবল" হিসাবে বিবেচিত হয় এবং সেগুলি স্পষ্টভাবে বান্ডেল এপিআইতে বর্ণিত।


এটি এখন পর্যন্ত একমাত্র উত্তর যা সত্যিই ওপি-র প্রশ্নের কাছে যেতে পারে, অর্থাত্ একটি বান্ডিল কী। stackoverflow.com/a/6236801/1588163 আরও অন্তর্দৃষ্টি দেয়।
ক্ল্যাপস

আমরা যদি কেবল ম্যাপিং ব্যবহার করতে পারি তবে কেন একটি বান্ডেল ব্যবহার করবেন? ধন্যবাদ!
রুচির বড়োনিয়া

@ রুচিরবারোনিয়াতে কোনও বান্ডিল ব্যবহার করার কোনও বিশেষ কারণ নেই যদি না আপনি এটিকে অ্যান্ড্রয়েড এপিআইয়ের যে অংশে বান্ডেল অবজেক্টগুলির প্রয়োজন হয় সেই অংশে প্রেরণ করতে চান না।
স্ক্রিপ্টোক্যালপস

8

শুধু একটি বান্ডিল তৈরি করুন,


Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);

"এই_এই_এই_পঞ্জি_ক্লাস.ক্লাস" এ

আপনি এই জাতীয় আইটেম পুনরুদ্ধার করতে পারেন।

Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);

5

ক্রিয়াকলাপগুলির মধ্যে ডেটা পাস করতে বান্ডিল ব্যবহার করা হয়। আপনি একটি বান্ডিল তৈরি করতে পারেন, এটি তে প্রবেশ করুন যা ক্রিয়াকলাপ শুরু করে যা গন্তব্য ক্রিয়াকলাপ থেকে ব্যবহার করা যেতে পারে।


3

বান্ডিল: - স্ট্রিং মানগুলি থেকে বিভিন্ন পার্সেলেবল প্রকারে ম্যাপিং।

বান্ডিলটি সাধারণত অ্যান্ড্রয়েডের বিভিন্ন ক্রিয়াকলাপের মধ্যে ডেটা পাস করার জন্য ব্যবহৃত হয়।

যখন আমরা অনপেজ () এর পরে কল করি তখন অনস্টপ () এবং তারপরে অনপস () থেকে অনপস () এ বিপরীত ক্রমে।

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


একটি ম্যাপিং, বান্ডিলের প্রকৃতি।
বোলমোস

2

বান্ডেলটি ক্রিয়াকলাপগুলির মধ্যে ডেটা ভাগ করতে এবং অনক্রিয়েট () পদ্ধতিতে অ্যাপের অবস্থা বাঁচাতে ব্যবহার করা হয় যাতে অ্যাপটি কোথায় তা বন্ধ হয়ে গেছে তা জানতে পারে ... আমি আশা করি এটি সহায়তা করে :)


0

বান্ডিল ব্যবহার ইন্টেন্ট অবজেক্টের সাহায্যে এক ক্রিয়াকলাপ থেকে অন্য ক্রিয়াকলাপে ডেটা প্রেরণ করে; যে কোনও ধরণের হতে পারে এমন ডেটা বান্ডিল ধারণ করে।

এখন আমি বলি যে কীভাবে দুটি ক্রিয়াকলাপের মধ্যে বান্ডেল পাসিং ডেটা তৈরি করবেন।

পদক্ষেপ 1: প্রথম ক্রিয়াকলাপে

Bundle b=new Bundle();

b.putString("mkv",anystring);

Intent in=new Intent(getApplicationContext(),secondActivity.class);

in.putExtras(b);

startActivity(in);

পদক্ষেপ 2: দ্বিতীয় ক্রিয়াকলাপে

Intent in=getIntent();

Bundle b=in.getExtras();

String s=b.getString("mkv");

আমি মনে করি এটি আপনার জন্য দরকারী ...........


0

বান্ডেলটি কেবলমাত্র দুটি পৃথক উপাদানগুলির মধ্যে ডেটা স্থানান্তর করার জন্য নয় তত বেশি গুরুত্বপূর্ণ এটি ক্রিয়াকলাপটিকে নতুন ক্রিয়াকলাপে ধ্বংস করার আগে সঞ্চিত মান পুনরুদ্ধার করতে ব্যবহৃত হয়।

যেমন একটি EditTextউইজেটের পাঠ্য বা এ এর ​​স্ক্রোল অবস্থান ListView


0

প্রথম ক্রিয়াকলাপ:

String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());

দ্বিতীয় ক্রিয়াকলাপ:

String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.