অ্যাড (), রিপ্লেস (), এবং অ্যাডটোব্যাকস্ট্যাক () এর মধ্যে পার্থক্য


300

এই পদ্ধতিগুলি কল করার মধ্যে প্রধান পার্থক্য কী:

fragmentTransaction.addToBackStack(name);
fragmentTransaction.replace(containerViewId, fragment, tag);
fragmentTransaction.add(containerViewId, fragment, tag);

ইতিমধ্যে বিদ্যমান খণ্ডটি প্রতিস্থাপন এবং ক্রিয়াকলাপের রাজ্যে একটি খণ্ড যুক্ত করা এবং পিছনের স্ট্যাকটিতে একটি ক্রিয়াকলাপ যুক্ত করার অর্থ কী?

দ্বিতীয়ত, এর সাথে findFragmentByTag(), এই ট্যাগটি add()/ replace()পদ্ধতি বা addToBackStack()পদ্ধতিতে যুক্ত করা সন্ধান করে?

উত্তর:


330

1) fragmentTransaction.addToBackStack(str);

বিবরণ - এই লেনদেনটি পিছনের স্ট্যাকটিতে যুক্ত করুন। এর অর্থ হ'ল লেনদেনটি প্রতিশ্রুতিবদ্ধ হওয়ার পরে মনে রাখা হবে এবং পরে যখন স্ট্যাকটি পপআপ করা হবে তখন তার ক্রিয়াকলাপটি বিপরীত হবে।

2) fragmentTransaction.replace(int containerViewId, Fragment fragment, String tag)

বিবরণ - একটি ধারক যুক্ত করা একটি বিদ্যমান টুকরা প্রতিস্থাপন। এটি মূলত একই কন্টেইনারভিউআইডির সাথে যুক্ত হওয়া সমস্ত যোগ করা টুকরোগুলির জন্য কলিং রিমুভ (ফ্রেগমেন্ট) এর সমান এবং তারপরে এখানে বর্ণিত একই যুক্তির সাথে যুক্ত (ইনট, ফ্র্যাগমেন্ট, স্ট্রিং)।

3) fragmentTransaction.add(int containerViewId, Fragment fragment, String tag)

বর্ণনা - ক্রিয়াকলাপের রাজ্যে একটি খণ্ড যুক্ত করুন। এই খণ্ডটি optionচ্ছিকভাবে কার্যকলাপের ধারক দৃশ্যে এর দৃশ্য (যদি ফ্রেগমেন্ট.অনক্রিয়েটভিউ নন-নাল ফেরায়) থাকতে পারে।

ইতিমধ্যে বিদ্যমান খণ্ডটি প্রতিস্থাপন করা এবং ক্রিয়াকলাপের রাজ্যে একটি খণ্ড যুক্ত করা এবং পিছনের স্ট্যাকটিতে একটি ক্রিয়াকলাপ যুক্ত করার অর্থ কী?

একটি স্ট্যাক রয়েছে যাতে চলমান অবস্থায় সমস্ত ক্রিয়াকলাপ রাখা হয়। খণ্ডগুলি ক্রিয়াকলাপের সাথে সম্পর্কিত। সুতরাং আপনি এগুলিকে কোনও ক্রিয়াকলাপে এম্বেড করার জন্য এগুলি যুক্ত করতে পারেন।

আপনি একাধিক ক্রিয়াকলাপে একাধিক ক্রিয়াকলাপে একটি খণ্ডকে পুনরায় ব্যবহার করতে একক ক্রিয়াকলাপে একাধিক টুকরো একত্রিত করতে পারেন। এটি মূলত কার্যকর যখন আপনি বিভিন্ন লেআউটগুলিতে আপনার টুকরো ধারক সংজ্ঞায়িত করেন। আপনাকে কেবল কোনও বিন্যাসে অন্য কোনও খণ্ডের সাথে প্রতিস্থাপন করতে হবে।

আপনি যখন বর্তমান লেআউটে নেভিগেট করেন, তখন আপনার পছন্দসই খণ্ডটির সাথে এটি প্রতিস্থাপন করতে আপনার কাছে সেই ধারকটির আইডি থাকে।

popBackStack()পদ্ধতির সাহায্যে আপনি ব্যাকস্ট্যাকের পূর্ববর্তী খণ্ডেও ফিরে যেতে পারেন । তার জন্য আপনাকে স্ট্যাকের মধ্যে সেই টুকরোটি যুক্ত করে ব্যবহার করতে হবে addToBackStack()এবং তারপরে commit()প্রতিফলিত করতে হবে। এটি শীর্ষে বর্তমানের সাথে বিপরীতে রয়েছে।

FindFraamentByTag যোগ বা প্রতিস্থাপন পদ্ধতি বা addToBackStack পদ্ধতি দ্বারা ট্যাগ যুক্ত এই সন্ধান করে?

আপনি ট্যাগ যুক্ত কিভাবে উপর নির্ভর করে। এটি কেবলমাত্র তার ট্যাগ দ্বারা একটি খণ্ড খুঁজে পায় যা আপনি এক্সএমএল থেকে স্ফীত হওয়ার আগে বা কোনও লেনদেনে যুক্ত হওয়ার পরে সরবরাহিত হওয়ার আগে সংজ্ঞায়িত করেছিলেন।

তথ্যসূত্র: টুকরো টানাপোড়েন


2
সুতরাং, আমি কি শুরু করার ক্রিয়াকলাপটি শুরু করার পদ্ধতিতে প্রতিস্থাপনের মাধ্যমে খণ্ড যুক্ত করতে পারি?
যোহানেস এআই

(এর আগে কোনও খণ্ড যুক্ত করা হয়নি)
যোহানেস এআই

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

1
@ না না, এটি বর্তমানে ধারকটিতে বিদ্যমান সমস্ত টুকরোটিকে বর্তমানের সাথে প্রতিস্থাপন করবে।
পুনর্জনহান

329

মধ্যে আরও একটি গুরুত্বপূর্ণ পার্থক্য addএবং replaceএই হল:

replaceবিদ্যমান টুকরাটি সরিয়ে দেয় এবং একটি নতুন টুকরা যুক্ত করে। এর অর্থ আপনি যখন পিছনে বোতাম টিপুন তখন যে খণ্ডটি প্রতিস্থাপন করা হবে তা অনুরোধ করার সাথে সাথে তৈরি করা হবে onCreateView। যেখানে addবিদ্যমান টুকরোগুলি ধরে রাখে এবং একটি নতুন টুকরো যুক্ত করে যার অর্থ বিদ্যমান খণ্ডটি সক্রিয় হবে এবং তারা 'বিরামপ্রাপ্ত' অবস্থায় থাকবে না তাই যখন পিছনের বোতামটি চাপানো onCreateViewহয় তখন বিদ্যমান খণ্ডের জন্য ডাকা হবে না (যে খণ্ডটি নতুন খণ্ডের আগে ছিল সেখানে যোগ করা হয়েছে)।

টুকরা এর জীবনচক্র ঘটনা নিরিখে onPause, onResume, onCreateViewএবং অন্যান্য জীবনচক্র ঘটনা ক্ষেত্রে এ অধিকার প্রার্থনা করা হবে replaceকিন্তু তারা ক্ষেত্রে প্রার্থনা করা অভ্যস্ত add

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


1
আমি মনে করি একটি পন্থাটি হতে পারে শীর্ষ সর্বাধিক খণ্ডে ইভেন্টটি প্রক্রিয়া করা এবং প্রসেসিং শেষ হওয়ার পরে বাতিলএভেন্টডেলিভারি () কল করুন। আপনি এখানে বাতিলএন্টি
জীবন

6
আমার কাছ থেকে +1 এটা জানা খুব জরুরি যে বর্তমান খণ্ডকে নতুন খণ্ডের সাথে প্রতিস্থাপন করা, এর অর্থ হ'ল খণ্ডের স্ট্যাক থেকে পপিং করার সময় পূর্ববর্তী খণ্ডটি পুনরায় তৈরি করার জন্য পুনরায় তৈরি করা হবে।
আন্দালুজ

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

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

আপনাকে অবশ্যই উল্লেখ করতে হবে যে আপনি অ্যাড () বা প্রতিস্থাপন () পদ্ধতিগুলির সাথে অ্যাডটোব্যাকস্ট্যাক () কল করছেন।
rahil008

99

একটি ক্রিয়াকলাপের উদাহরণ হিসাবে 2 টি টুকরা থাকে এবং আমরা ক্রিয়াকলাপের প্রতিটি বিন্যাসে লেআউটে FragmentManagerপ্রতিস্থাপন / যুক্ত করতে ব্যবহার করিaddToBackstack

প্রতিস্থাপন ব্যবহার করুন

ফ্র্যাগমেন্ট 1 এ যান

Fragment1: onAttach
Fragment1: onCreate
Fragment1: onCreateView
Fragment1: onActivityCreated
Fragment1: onStart
Fragment1: onResume

ফ্র্যাগমেন্ট 2 এ যান

Fragment2: onAttach
Fragment2: onCreate
Fragment1: onPause
Fragment1: onStop
Fragment1: onDestroyView
Fragment2: onCreateView
Fragment2: onActivityCreated
Fragment2: onStart
Fragment2: onResume

পপ ফ্র্যাগমেন্ট 2

Fragment2: onPause
Fragment2: onStop
Fragment2: onDestroyView
Fragment2: onDestroy
Fragment2: onDetach
Fragment1: onCreateView
Fragment1: onStart
Fragment1: onResume

পপ ফ্র্যাগমেন্ট 1

Fragment1: onPause
Fragment1: onStop
Fragment1: onDestroyView
Fragment1: onDestroy
Fragment1: onDetach

অ্যাড ব্যবহার করুন

ফ্র্যাগমেন্ট 1 এ যান

Fragment1: onAttach
Fragment1: onCreate
Fragment1: onCreateView
Fragment1: onActivityCreated
Fragment1: onStart
Fragment1: onResume

ফ্র্যাগমেন্ট 2 এ যান

Fragment2: onAttach
Fragment2: onCreate
Fragment2: onCreateView
Fragment2: onActivityCreated
Fragment2: onStart
Fragment2: onResume

পপ ফ্র্যাগমেন্ট 2

Fragment2: onPause
Fragment2: onStop
Fragment2: onDestroyView
Fragment2: onDestroy
Fragment2: onDetach

পপ ফ্র্যাগমেন্ট 1

Fragment1: onPause
Fragment1: onStop
Fragment1: onDestroyView
Fragment1: onDestroy
Fragment1: onDetach

নমুনা প্রকল্প


1
প্রতিটি পপ অ্যাকশনে onPause()আগে কল করার কথা ছিল না ? onStop()
আইক্যান্টসি

'অ্যাড ()' এবং 'রিপ্লেস ()' এর মধ্যে পার্থক্যের দুর্দান্ত উত্তর, যদিও অ্যাডটোব্যাকস্ট্যাক () সম্পর্কে অনুপস্থিত। উপভোট
শিরীশ হার্ভাডে

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

38

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

বিকল্প 1 - "অ্যাডটোব্যাকস্ট্যাক ()" কখনই ব্যবহৃত হয় না

কেস 1 এ - যুক্ত করুন, অপসারণ এবং পিছনে বোতামটি ক্লিক করুন

Activity :      onCreate() - onStart() - onResume()                             Activity is visible
add Fragment A :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment A is visible
add Fragment B :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment B is visible
add Fragment C :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment C is visible
remove Fragment C :     onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               Fragment B is visible
(Back button clicked)
Activity :      onPause() - onStop() - onDestroy()
Fragment A :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()
Fragment B :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               App is closed, nothing is visible

কেস 1 বি - যুক্ত করুন, প্রতিস্থাপন করুন এবং পিছনে বোতামটি ক্লিক করুন

Activity :      onCreate() - onStart() - onResume()                             Activity is visible
add Fragment A :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment A is visible
add Fragment B :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment B is visible
(replace Fragment C)    
Fragment B :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               
Fragment A :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()
Fragment C :        onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment C is visible
(Back button clicked)
Activity :      onPause() - onStop() - onDestroy()
Fragment C :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               App is closed, nothing is visible

বিকল্প 2 - "অ্যাডটোব্যাকস্ট্যাক ()" সর্বদা ব্যবহৃত হয়

কেস 2 এ - যুক্ত করুন, অপসারণ এবং পিছনে বোতামটি ক্লিক করুন

Activity :      onCreate() - onStart() - onResume()                             Activity is visible
add Fragment A :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment A is visible
add Fragment B :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment B is visible
add Fragment C :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment C is visible
remove Fragment C :     onPause() - onStop() - onDestroyView()                              Fragment B is visible
(Back button clicked)
Fragment C :        onCreateView() - onActivityCreated() - onStart() - onResume()                   Fragment C is visible
(Back button clicked)
Fragment C :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               Fragment B is visible
(Back button clicked)
Fragment B :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               Fragment A is visible
(Back button clicked)
Fragment A :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               Activity is visible
(Back button clicked)
Activity :      onPause() - onStop() - onDestroy()                              App is closed, nothing is visible

কেস 2 বি - যুক্ত করা, প্রতিস্থাপন, অপসারণ এবং পিছনে বোতামটি ক্লিক করা

Activity :      onCreate() - onStart() - onResume()                             Activity is visible
add Fragment A :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment A is visible
add Fragment B :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment B is visible
(replace Fragment C)    
Fragment B :        onPause() - onStop() - onDestroyView()  
Fragment A :        onPause() - onStop() - onDestroyView() 
Fragment C :        onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment C is visible
remove Fragment C :     onPause() - onStop() - onDestroyView()                              Activity is visible
(Back button clicked)
Fragment C :        onCreateView() - onActivityCreated() - onStart() - onResume()                   Fragment C is visible
(Back button clicked)
Fragment C :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               
Fragment A :        onCreateView() - onActivityCreated() - onStart() - onResume()   
Fragment B :        onCreateView() - onActivityCreated() - onStart() - onResume()                   Fragment B is visible
(Back button clicked)
Fragment B :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               Fragment A is visible
(Back button clicked)
Fragment A :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               Activity is visible
(Back button clicked)
Activity :      onPause() - onStop() - onDestroy()                              App is closed, nothing is visible

বিকল্প 3 - "অ্যাডটোব্যাকস্ট্যাক ()" সর্বদা ব্যবহৃত হয় না (নীচের উদাহরণগুলিতে ডাব্লু / ও ইঙ্গিত করে যে এটি ব্যবহৃত হয়নি)

কেস 3 এ - যুক্ত করুন, অপসারণ এবং পিছনে বোতামটি ক্লিক করুন

Activity :      onCreate() - onStart() - onResume()                             Activity is visible
add Fragment A :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment A is visible
add Fragment B w/o:     onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment B is visible
add Fragment C w/o:     onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment C is visible
remove Fragment C :     onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               Fragment B is visible
(Back button clicked)
Fragment B :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               
Fragment A :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               Activity is visible
(Back button clicked)
Activity :      onPause() - onStop() - onDestroy()                              App is closed, nothing is visible

কেস 3 বি - যুক্ত করা, প্রতিস্থাপন, অপসারণ এবং পিছনে বোতামটি ক্লিক করা

Activity :      onCreate() - onStart() - onResume()                             Activity is visible
add Fragment A :    onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment A is visible
add Fragment B w/o:     onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment B is visible
(replace Fragment C)    
Fragment B :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()   
Fragment A :        onPause() - onStop() - onDestroyView() 
Fragment C :        onAttach() - onCreate() - onCreateView() - onActivityCreated() - onStart() - onResume()     Fragment C is visible
remove Fragment C :     onPause() - onStop() - onDestroyView()                              Activity is visible
(Back button clicked)
Fragment C :        onCreateView() - onActivityCreated() - onStart() - onResume()                   Fragment C is visible
(Back button clicked)
Fragment C :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               
Fragment A :        onCreateView() - onActivityCreated() - onStart() - onResume()                   Fragment A is visible
(Back button clicked)
Fragment A :        onPause() - onStop() - onDestroyView() - onDestroy() - onDetach()               Activity is visible
(Back button clicked)
Activity :      onPause() - onStop() - onDestroy()                              App is closed, nothing is visible

1
যথেষ্ট যথেষ্ট। ভালো প্রচেষ্টা!
পাল্প ফিকশন

1
সত্যিই দুর্দান্ত উত্তর, অনেক বিভ্রান্তি মুছে ফেলেছে।
টিনটিন

সুতরাং আমরা কি বলতে পারি যে টুকরো টুকরো দিয়ে কাজ করার সময় ব্যাক বোতামটি একই অংশে ফ্র্যাগমেন্টম্যানজ.আর.পপব্যাকস্ট্যাক () ফাংশনে কাজ করে?
টিনটিন

দুর্দান্ত উত্তর, ভাল না হতে পারে। এটি উত্তর গ্রহণ করা উচিত।
শিরিশ হার্ভাডে

25

মধ্যে মৌলিক পার্থক্য add()এবং replace()হিসাবে বর্ণনা করা যায়:

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

আমরা addToBackStack()একসাথে add()বা এর সাথে যখন ব্যবহার করি আমরা ঠিক পার্থক্যটি দেখতে পারি replace()

আমরা যখন ... এর পরে উইন্ডোজ বোতাম টিপব ... অনক্রিটভিউ add()কখনই ডাকা হয় না, তবে replace()আমরা যখন পিছনে বোতাম টিপব ... অ্যানক্রিয়েটভিউকে প্রতিবার ডাকা হয়।


1
সুতরাং অ্যাড্রয়েড মেমরির ক্ষেত্রে অ্যাড () এর ফলে আরও বোঝা আসে, যেহেতু পূর্ববর্তী খণ্ডটির দৃশ্যটি ধ্বংস হয় না?
ডেরেকি

@ ডেরকিয় হ্যাঁ, আমিও তাই মনে করি।
অর্পিত জে

আমি যা খুঁজছিলাম তা হল
পারভেজ রাফি

2

যখন আমরা প্রথম টুকরা যোগ করি -> অ্যাড () পদ্ধতিটি ব্যবহার করে দ্বিতীয় খণ্ড

 btn_one.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(),"Click First 
Fragment",Toast.LENGTH_LONG).show();

                Fragment fragment = new SecondFragment();
                getActivity().getSupportFragmentManager().beginTransaction()
                        .add(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();
//                        .replace(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();

            }
        });

যখন আমরা খণ্ডে অ্যাড () ব্যবহার করি

E/Keshav SecondFragment: onAttach
E/Keshav SecondFragment: onCreate
E/Keshav SecondFragment: onCreateView
E/Keshav SecondFragment: onActivityCreated
E/Keshav SecondFragment: onStart
E/Keshav SecondFragment: onResume

যখন আমরা খণ্ডে প্রতিস্থাপন () ব্যবহার করি

প্রথম প্রতিস্থাপন () পদ্ধতিটি ব্যবহার করে প্রথম -> দ্বিতীয়তে প্রথম টুকরা দ্বিতীয় খণ্ডে গিয়ে

 btn_one.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(),"Click First Fragment",Toast.LENGTH_LONG).show();

                Fragment fragment = new SecondFragment();
                getActivity().getSupportFragmentManager().beginTransaction()
//                        .add(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();
                        .replace(R.id.fragment_frame, fragment, fragment.getClass().getSimpleName()).addToBackStack(null).commit();

            }
        });

E/Keshav SecondFragment: onAttach
E/Keshav SecondFragment: onCreate

E/Keshav FirstFragment: onPause -------------------------- FirstFragment
E/Keshav FirstFragment: onStop --------------------------- FirstFragment
E/Keshav FirstFragment: onDestroyView -------------------- FirstFragment

E/Keshav SecondFragment: onCreateView
E/Keshav SecondFragment: onActivityCreated
E/Keshav SecondFragment: onStart
E/Keshav SecondFragment: onResume

প্রথম টুকরো প্রতিস্থাপনের ক্ষেত্রে এই পদ্ধতিটিকে অতিরিক্ত বলা হয় (অনপজ, অনসটপ, অনডাস্ট্রয়েভিউ অতিরিক্ত কল করা হয়)

ই / কেশব ফার্স্ট ফ্রেগমেন্ট: অনপেজ

ই / কেশব ফার্স্ট ফ্রেমমেন্ট: অনস্টপ

ই / কেশব ফার্স্ট ফ্রেগমেন্ট: অনডেট্রয়েভিউ


0

ফ্রেগমেন্টম্যাঞ্জারের ফাংশন অ্যাড এবং রিপ্লেসগুলি এগুলি হিসাবে বর্ণনা করা যেতে পারে add যোগ করার অর্থ এটি খণ্ডটি ব্যাক স্ট্যাকের টুকরো যোগ করবে এবং এটি আপনাকে প্রদত্ত ফ্রেমে প্রদর্শিত হবে

getFragmentManager.beginTransaction.add(R.id.contentframe,Fragment1.newInstance(),null)

২. স্থানটির অর্থ হ'ল আপনি নির্দিষ্ট ফ্রেমে অন্য খণ্ডের সাথে খণ্ডটি প্রতিস্থাপন করছেন

getFragmentManager.beginTransaction.replace(R.id.contentframe,Fragment1.newInstance(),null)

উভয়ের মধ্যে প্রধান ইউটিলিটি হ'ল আপনি যখন পিছনে স্ট্যাকিং করবেন তখন প্রতিস্থাপনটি খণ্ডটি রিফ্রেশ করবে তবে যুক্তটি পূর্ববর্তী খণ্ডটিকে রিফ্রেশ করবে না।


0

গুরুত্বপূর্ণ বিষয় লক্ষ্য করা যায়:

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


0

এখানে একটি ছবি যে মধ্যে পার্থক্য দেখায় add()এবংreplace()

এখানে চিত্র বর্ণনা লিখুন

সুতরাং add()পদ্ধতিটি ফ্র্যাগমেন্টকন্টেইনারটিতে পূর্ববর্তী টুকরাটির শীর্ষে টুকরো যোগ করা চালিয়ে যায়

যদিও replace()পদ্ধতি সব মুছে ফেলা হবে পাত্রে থেকে পূর্ববর্তী অসম্পূর্ণ অংশ এবং তারপর FragmentContainer এটা যোগ করুন।

অ্যাডটোব্যাকস্ট্যাক কী

addtoBackStackপদ্ধতি অ্যাড () ব্যবহার করে এবং পদ্ধতিগুলি প্রতিস্থাপনের সাথে ব্যবহার করা যেতে পারে। এটি ফ্রেগমেন্ট এপিআইতে একটি ভিন্ন উদ্দেশ্য পরিবেশন করে।

উদ্দেশ্য কি?

ক্রিয়াকলাপের API এর বিপরীতে ফ্রেগমেন্ট এপিআই ডিফল্টরূপে ব্যাক বোতাম নেভিগেশনের সাথে আসে না । আপনি যদি আগের ফ্রেমে ফিরে যেতে চান তবে আমরা টুকরাটিতে অ্যাডটোব্যাকস্ট্যাক () পদ্ধতিটি ব্যবহার করি। আসুন দুজনেই বুঝি

মামলা 1:

getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.fragmentContainer, fragment, "TAG")
            .addToBackStack("TAG")
            .commit();

এখানে চিত্র বর্ণনা লিখুন

কেস 2:

getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.fragmentContainer, fragment, "TAG")
            .commit();

এখানে চিত্র বর্ণনা লিখুন

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