একটি টুকরা আলাদা করা এবং এটি অপসারণের মধ্যে পার্থক্য কী?


118

ফ্রেগমেন্ট ট্রান্সজেকশনের জন্য অ্যান্ড্রয়েড ডক্সে আমি দুটি খুব অনুরূপ পদ্ধতি লক্ষ্য করেছি: detachএবং remove। সেখানে বর্ণিত বিবরণগুলি কখন ব্যবহার করতে হবে সে সম্পর্কে খুব বেশি অন্তর্দৃষ্টি দেয় না এবং আমি যা বলতে পারি সেগুলি সেগুলি একইরূপে উপস্থিত বলে মনে হয়।

সুতরাং: এই দুটি পদ্ধতির মধ্যে পার্থক্য কী?

উত্তর:


156

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

সরান মানে খণ্ডের দৃষ্টান্তটি পুনরায় সংযুক্ত করা যাবে না। আপনাকে এটিকে আবার খণ্ডিত লেনদেনে যুক্ত করতে হবে।

উত্স মন্তব্য

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


145
Rajdeep এর উত্তর যোগ করার জন্য, আপনি দেখতে পাবেন যে একটি Fragmentহয় বিচু্যত , তার onPause, onStopএবং onDestroyViewপদ্ধতি শুধুমাত্র বলা হয় (যাতে)। অন্যদিকে, যখন একজন উপর Fragmentহয় মুছে , তার onPause, onStop, onDestroyView, onDestroyএবং onDetachমেথড কল করা হয় (যাতে)। একইভাবে, যখন সংযোজনের , Fragmentএর onCreateView, onStartএবং onResumeপদ্ধতি শুধুমাত্র বলা হয়; এবং যখন যোগ , Fragmentএর onAttach, onCreate, onCreateView, onStartএবং onResumeপদ্ধতি (যাতে) বলা হয়।
আদিল হুসেন

1
একটা ফাস্ট Q & A- ডায়ান Hackborn সাথে আছেন এখানে । তাহলে আমার কেন এই লগ আছে? আপনি কীভাবে জানবেন যে FT.detach () বলা হয়েছে?
পোট্রাথর

1
একে অপরের লাভ কী? আমি যখন অন্যটির পক্ষে অনুকূল হয় তখন একটি ব্যবহারের বিষয়টি জানতে চাই? আমি সবসময় যুক্ত এবং অপসারণ করি, এটি কি খারাপ?
নিয়ন ওয়ার্জ

1
সেরা সংক্ষিপ্ত এবং সংক্ষিপ্ত বিবরণ।
রোবটেক

55

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

কোনও ক্রিয়াকলাপে প্রাথমিকভাবে খণ্ড যুক্ত করতে, আপনি ব্যবহার করুন: getFragmentManager ()। বিগ্রেট ট্রানজেকশন ()। যুক্ত করুন (আর।

এটি ক্রিয়াকলাপটিকে ফ্রেগমেন্টের সাথে সংযুক্ত করে এবং খণ্ডের সাথে একটি ভিউও যুক্ত করে।

এখানে ফলাফলের চক্রের ইভেন্টগুলি এবং অন্যান্য গুরুত্বপূর্ণ পদ্ধতির ফেরতের মানগুলি রয়েছে:

onAttach()           
onCreate()           
onCreateView()       
onViewCreated()      
onActivityCreated()  
onViewStateRestored()
onStart()            
onResume()

mFragment.getView() == null: false                    
mFragment.getActivity() == null: false

একটি ক্রিয়াকলাপ থেকে একটি খণ্ড অপসারণ করতে, আপনি ব্যবহার করুন: getFragmentManager ()। StartTransaction ()। অপসারণ (এমফ্রেগমেন্ট) .কমিট ()।

এটি একটি দর্শন বা ক্রিয়াকলাপের সাথে কোনও সংযুক্তি সরিয়ে দেয়।

এখানে ফলাফলের চক্রের ইভেন্টগুলি এবং অন্যান্য গুরুত্বপূর্ণ পদ্ধতির ফেরতের মানগুলি রয়েছে:

onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()

mFragment.getView() == null: true
mFragment.getActivity() == null: true

আমি এখানে খণ্ডটি পুনরায় যুক্ত করেছি

একটি ক্রিয়াকলাপ থেকে একটি যুক্ত টুকরা বিচ্ছিন্ন করতে, আপনি ব্যবহার করুন: getFraamentManager ()। বিগ্রেট ট্রানজেকশন ()। বিচ্ছিন্ন (এমফ্রেগমেন্ট) .কমিট ()।

এটি কোনও দৃশ্যের সাথে কোনও সংযুক্তি সরিয়ে দেয় তবে ক্রিয়াকলাপের সাথে সংযুক্তি রাখে।

এখানে ফলাফলের চক্রের ইভেন্টগুলি এবং অন্যান্য গুরুত্বপূর্ণ পদ্ধতির ফেরতের মানগুলি রয়েছে:

onPause()                             
onStop()                              
onDestroyView()                      

mFragment.getView() == null: true
mFragment.getActivity() == null: false

ক্রিয়াকলাপের সাথে বিচ্ছিন্ন একটি টুকরোটিকে পুনরায় সংযুক্ত করতে, আপনি ব্যবহার করুন: getFragmentManager () begin .আবারট্র্যাশন () attach সংযুক্ত (এমফ্রেগমেন্ট) com কমিট ()।

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

এখানে ফলাফলের চক্রের ইভেন্টগুলি এবং অন্যান্য গুরুত্বপূর্ণ পদ্ধতির ফেরতের মানগুলি রয়েছে:

onCreateView()                        
onViewCreated()                       
onActivityCreated()                   
onViewStateRestored()                 
onStart()                             
onResume()                            

mFragment.getView() == null: false
mFragment.getActivity() == null: false

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

যদি আপনি এমন একটি খণ্ড যুক্ত করার চেষ্টা করেন যা () যোগ করার পরিবর্তে সংযুক্তি () ব্যবহার করে সরান () ব্যবহার করে সরিয়ে ফেলা হয়েছে তবে কিছুই পরিবর্তন হবে বলে মনে হচ্ছে না।

যখন ভিউ ভিউ () নালার দিকে ফিরে আসে, তখন খণ্ডটির এখনও এটি তৈরি করা শেষ দর্শনের অভ্যন্তরীণ উল্লেখ থাকতে পারে। এই দর্শনটি আর বৈধ নয় এবং ব্যবহার করা উচিত নয়।


1
ভাল কাজ. তবে খণ্ডটি অপসারণের পরে পুনরায় সংযুক্তি এবং পুনরায় যুক্ত করার একই প্রভাব রয়েছে বলে মনে হয়েছে এটি আকর্ষণীয়।
stdout

9
সুতরাং দেখা গেল যে "সংযুক্তি ()" অ্যাটাচ () তে প্রার্থনা করবে না। "বিচ্ছিন্ন ()" অন ডেটেচ () চালাবে না।
কুনইউ সোই

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