আমি নতুনদের যোগ করতে চাই যে এখানে 2 টি সবচেয়ে আপোভেট করা উত্তরের মধ্যে পার্থক্য একটি খণ্ডের বিভিন্ন ব্যবহার দ্বারা দেওয়া হয়েছে।
আপনি যে জাভা শ্রেণীর যে অংশটি পাস করতে চান সেই ডেটা যদি ব্যবহার করেন তবে আপনি ডেটা পাস করার প্রথম উত্তরটি প্রয়োগ করতে পারেন:
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);
তবে আপনি উদাহরণস্বরূপ ট্যাবড টুকরা জন্য অ্যান্ড্রয়েড স্টুডিও দ্বারা প্রদত্ত ডিফল্ট কোড ব্যবহার করেন, এই কোড কাজ করবে না।
এমনকি আপনি যদি আপনার ফ্রেগমেন্টক্লাসের সাথে ডিফল্ট প্লেসোল্ডারফ্র্যাগমেন্টটি প্রতিস্থাপন করেন এবং এমনকি যদি আপনি ফ্র্যাগমেন্টপাগারএডাপ্টারটিকে নতুন পরিস্থিতিতে সংশোধন করেন তবেও গেটটাইম () এর জন্য একটি স্যুইচ এবং getPageTitle () এর জন্য অন্য একটি স্যুইচ যুক্ত করুন ( এখানে দেখানো হয়েছে )
সতর্কতা: উপরে উল্লিখিত ক্লিপটিতে কোড ত্রুটি রয়েছে, যা আমি পরে এখানে ব্যাখ্যা করছি, তবে আপনি কীভাবে ডিফল্ট কোড থেকে ট্যাবড টুকরো টুকরো টুকরো জন্য সম্পাদনাযোগ্য কোড যেতে পারেন তা দেখতে দরকারী)! আপনি যদি ক্লিপ থেকে জাভা ক্লাস এবং এক্সএমএল ফাইলগুলি বিবেচনা করেন তবে (প্রাথমিক দৃশ্যে ট্যাবড টুকরো টুকরো টুকরো টুকরো ব্যবহারের জন্য প্রতিনিধি) বিবেচনা করা হলে আমার উত্তরটির বাকী অংশগুলি আরও বেশি অর্থবোধ করে।
এই পৃষ্ঠাটি থেকে সর্বাধিক আপত্তিযুক্ত উত্তরগুলি কাজ না করার মূল কারণটি হ'ল ট্যাবযুক্ত টুকরাগুলির জন্য সেই ডিফল্ট কোডটিতে টুকরোগুলি অন্য জাভা শ্রেণিতে ব্যবহৃত হয়: ফ্রেগমেন্টপেজার অ্যাডাপ্টার!
সুতরাং, ডেটা প্রেরণ করার জন্য, আপনি মাদারঅ্যাক্টিভিটিতে একটি বান্ডিল তৈরি করতে এবং প্রবন্ধ নং 2 ব্যবহার করে ফ্রেগমেন্টপেজার অ্যাডাপ্টারে পাস করতে প্ররোচিত হন।
কেবল এটি আবার ভুল। ( সম্ভবত আপনি এটি এটি করতে পারেন, তবে এটি কেবল একটি জটিলতা যা সত্যই প্রয়োজন হয় না )।
আমি মনে করি, এটি করার সঠিক / সহজ উপায়টি হ'ল সরাসরি উত্তর নং 2 ব্যবহার করে প্রশ্নটির খণ্ডে ডেটা প্রেরণ করা। হ্যাঁ, ট্যাবযুক্ত খণ্ডগুলির জন্য ক্রিয়াকলাপ এবং টুকরাটির মধ্যে শক্ত সংযোগ থাকবে, কিন্তু এটি প্রত্যাশিত। আমি আপনাকে মাদারঅ্যাক্টিভিটি জাভা ক্লাসের ভিতরে ট্যাবড টুকরো তৈরি করার পরামর্শ দিচ্ছি (সাবক্লাস হিসাবে, তারা মাদারএকটিভিটির বাইরে কখনও ব্যবহার করা হবে না) - এটি সহজ, মাদারএকটিভিটি জাভা ক্লাসের মধ্যে যতগুলি টুকরো দরকার তেমন যোগ করুন:
public static class Tab1 extends Fragment {
public Tab1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.your_layout_name_for_fragment_1, container, false);
return rootView;
}
}.
সুতরাং, মাদারঅ্যাক্টিভিটি থেকে এই জাতীয় খণ্ডটিতে ডেটা প্রেরণ করতে আপনাকে আপনার মাদার ক্রিয়াকলাপের ওঙ্ক্রিটের উপরে ব্যক্তিগত স্ট্রিংস / বান্ডিল তৈরি করতে হবে - যা আপনি টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করে পূরণ করতে পারবেন অনক্রিটের পরে তৈরি পদ্ধতি (এখানে getMyData () নামে পরিচিত)।
public class MotherActivity extends Activity {
private String out;
private Bundle results;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mother_activity);
// for example get a value from the previous activity
Intent intent = getIntent();
out = intent.getExtras().getString("Key");
}
public Bundle getMyData() {
Bundle hm = new Bundle();
hm.putString("val1",out);
return hm;
}
}
এবং তারপরে খণ্ড শ্রেণিতে আপনি getMyData ব্যবহার করবেন:
public static class Tab1 extends Fragment {
/**
* The fragment argument representing the section number for this
* fragment.
*/
public Tab1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.your_layout_name_for_fragment_1, container, false);
TextView output = (TextView)rootView.findViewById(R.id.your_id_for_a_text_view_within_the_layout);
MotherActivity activity = (MotherActivity)getActivity();
Bundle results = activity.getMyData();
String value1 = results.getString("val1");
output.setText(value1);
return rootView;
}
}
আপনার যদি ডাটাবেস প্রশ্ন থাকে তবে আমি আপনাকে মাদারঅ্যাক্টিভিটিতে এটি করার পরামর্শ দিই (এবং উপরে উল্লিখিত টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো হিসাবে, হিসাবে আপনার স্ট্রিংস / ইন্টিজার হিসাবে একটি বান্ডেলের অভ্যন্তরে কীগুলির সাথে সংযুক্ত হিসাবে তাদের ফলাফলগুলি পাস করুন), আপনার বাক্য গঠন আরও জটিল হয়ে উঠবে (এটি getActivity হয়ে যায় () উদাহরণস্বরূপ, এবং getInttent getActivity ()। getInttent) হয়ে যায়, তবে আপনার ইচ্ছা অনুযায়ী করার বিকল্পও রয়েছে।
নতুনদের জন্য আমার পরামর্শটি ছোট পদক্ষেপগুলিতে মনোনিবেশ করা। প্রথমে, কোনও তথ্য পাস না করে খুব সাধারণ ট্যাবড ক্রিয়াকলাপটি খোলার আপনার অভিপ্রায় পান। এটা কি কাজ করে? এটি আপনি যে ট্যাবগুলি প্রত্যাশা করছেন তা কি খোলে? তা না হলে কেন?
এটি থেকে শুরু করুন এবং এই ক্লিপটিতে উপস্থাপিতগুলির মতো সমাধান প্রয়োগ করে , কী অনুপস্থিত রয়েছে তা দেখুন। সেই নির্দিষ্ট ক্লিপের জন্য, মাইনাসেটিভিটি.এক্সএমএল কখনই প্রদর্শিত হয় না। এটি অবশ্যই আপনাকে বিভ্রান্ত করবে। তবে আপনি যদি মনোযোগ দিন, আপনি দেখতে পাবেন যে উদাহরণস্বরূপ প্রেক্ষাপট (সরঞ্জামসমূহ: প্রসঙ্গ) xML টুকরা ফাইলগুলিতে ভুল। প্রতিটি খণ্ড এক্সএমএলকে সঠিক খণ্ড বিভাগ (বা বিভাজক ব্যবহার করে সাবক্লাস to) নির্দেশ করতে হবে।
আপনি দেখতে পাবেন যে মূল ক্রিয়াকলাপ জাভা শ্রেণিতে আপনাকে ট্যাগলয়েআউট.সেটআপ উইথভিউপ্যাগার (এমভিউপাগার) যুক্ত করতে হবে - ট্যাবলায়আউট ট্যাবলাইআউট = (ট্যাবলআউট) সন্ধানের ভিউবিআইআইডি (আর.আইডি.ট্যাবস) এর ঠিক পরে; এই লাইনটি ছাড়া আপনার দৃষ্টিভঙ্গিটি খণ্ডগুলির এক্সএমএল ফাইলগুলির সাথে লিঙ্কযুক্ত নয়, তবে এটি কেবলমাত্র মূল ক্রিয়াকলাপের এক্সএমএল ফাইলটি দেখায়।
প্রধান ক্রিয়াকলাপ জাভা ক্লাসে লাইন ছাড়াও, প্রধান ক্রিয়াকলাপ এক্সএমএল ফাইলে আপনার অবস্থার সাথে মানিয়ে নিতে আপনাকে ট্যাবগুলি পরিবর্তন করতে হবে (যেমন ট্যাবআইটেমগুলি যুক্ত বা সরাতে)। যদি আপনার প্রধান ক্রিয়াকলাপ এক্সএমএলে ট্যাব না থাকে তবে আপনি সম্ভবত প্রথম স্থানে তৈরি করার সময় সঠিক ক্রিয়াকলাপটি পছন্দ করেন নি (নতুন ক্রিয়াকলাপ - ট্যাবড ক্রিয়াকলাপ)।
দয়া করে নোট করুন যে গত 3 অনুচ্ছেদে আমি ভিডিওটি সম্পর্কে কথা বলি! সুতরাং যখন আমি প্রধান ক্রিয়াকলাপ এক্সএমএল বলি তখন এটি ভিডিওতে প্রধান ক্রিয়াকলাপ XML, যা আপনার পরিস্থিতিতে মাদারঅ্যাক্টিভিটি এক্সএমএল ফাইল।