অ্যান্ড্রয়েড টুকরা: কবে লুকান / শো ব্যবহার করবেন বা যুক্ত / অপসারণ / প্রতিস্থাপন করবেন?


117

মনে করুন আমি বর্তমান টুকরোটিকে কিছু ধারক দৃশ্যে অন্যটির সাথে প্রতিস্থাপন করতে চাই। প্রতিস্থাপন ব্যবহার করা কি আরও ভাল ...

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, newFragment, null);
    ft.commit();

... বা নীচে, শো এবং লুকানোর সাথে?

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.hide(oldFragment);
    ft.show(newFragment);
    ft.commit();

এটি করার একটি উপায় কি আরও কার্যকর? কখন এই পদ্ধতিগুলি ব্যবহার করবেন বা কীভাবে তারা জড়িত টুকরোটির জীবনকালকে প্রভাবিত করে সে সম্পর্কে খুব বেশি তথ্য খুঁজে পাওয়া যায় না। ধন্যবাদ!


যদি আমি খণ্ড খ থেকে বি খণ্ড বিতে চলে যাই এবং আবার খণ্ড খ-এ ফিরে যাই তবে কীভাবে আমি নিশ্চিত করতে পারি যে জীবনচক্রের ইভেন্ট যেমন অনক্রিটভিউ খণ্ড A তে কল হয় না? ট্যাগ কাজ করে খণ্ড খুঁজে পেতে পারে?
ব্ল্যাকহক 12'18

উত্তর:


135

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

যদি আপনার উচ্চ সম্ভাবনা থাকে যে আপনার আবার সেই খণ্ডটির প্রয়োজন হবে, তবে কেবল এটি লুকিয়ে রাখুন কারণ এটির পুনরায় চিত্র পুনঃনির্মাণের চেয়ে সম্পূর্ণরূপে পুনরায় আঁকতে এটি একটি ব্যয়বহুল ক্রিয়াকলাপ।


5
আমাদের চাহিদার জন্য, টুকরা আরম্ভের চমত্কার ব্যয়বহুল, তাই আমরা সম্ভবত সাথে যাব hide()এবং show()যে নেভিগেশন সংরক্ষণ করুন! এর জন্য ধন্যবাদ!
রবার্ট কার্ল

2
হাই, যখন আপনি উইন্ডো থেকে বিচ্ছিন্নতা বলবেন, তখন কি আপনার মানে ডেটাচ () কলব্যাক কল হবে? আমি পরীক্ষা করে দেখেছি, মনে হয় এটি তেমনটি নয়।
আদা জিম

সম্ভবত তিনি "বিচ্ছিন্ন" অর্থ; একটি
খণ্ডটিও

1
@ জয়নোডিস, আমারও একই সমস্যা। আমার সমাধানটি হ'ল 'সেভ ইন্স্ট্যান্সস্টেট স্টেট () - সেভড ইনস্ট্যান্সস্টেট.পুটবুলিয়ান (STATE_HIDDEN, isHID ()) এ টুকরোটির লুকানো অবস্থা সংরক্ষণ করা; তারপরে onCreate () এ (saveInstanceState! = নাল) লুকানো অবস্থা ফিরে পেতে এবং যদি খণ্ডটি গোপন থাকে তবে লেনদেনের মাধ্যমে এটি আড়াল করুন।
worawee.s

1
@ worawee.s ওহে এবং আপডেটের জন্য ধন্যবাদ :)! আমি সমস্যাটি কিছুক্ষণ আগে আমার শেষের দিকে সমাধান করেছি - আমার আসলে লুকানোর / প্রদর্শন ইত্যাদির দরকার নেই তাই আমি এটি সম্পূর্ণভাবে ফেলে দিয়েছি এবং এখন আমি একক প্যানে অ্যাড / প্রতিস্থাপন বা একক খণ্ড ক্রিয়াকলাপের মতো মানদণ্ডগুলি নিয়ে চলেছি (মূলত মূলত বিশদ প্রবাহ) । যারা এখনও আপনার সমাধানটি লুকান ব্যবহার করেন তাদের পক্ষে সত্যই সহায়ক - এবং সেভড ইনস্ট্যান্স চেক না করা! = আমি আগে যা করেছি তার মধ্যে একটি ভুল ছিল।
এজেন্টকনফফ

5

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


মূলত সরান সমস্ত প্রতিস্থাপন। মিলের আড়ালটি আমি খুঁজে পাইনি সমস্ত :(
অলিকএলজিন-কিলাকা

@ অলিকএলজিন-কিলাকা আমার ক্রিয়াকলাপে তিনটি খণ্ডে 3 টি টুকরোগুলি আমি নেটওয়ার্ক থেকে ডেটা এনেছি যে পদ্ধতিটি অনুসরণ করা উচিত
মনসুখ আহির

0

আমি আমার ক্রিয়াকলাপে হাইড / শো পদ্ধতিটি 4 টি টুকরোগুলি ব্যবহার করে এটি আমার সমাধানটি সমাধান করে তবে কিছু সময় এলোমেলোভাবে যখন আমি আমার ডায়ালগটি দেখি তখন এটি উইন্ডোটিকে খারাপ টোকেন ব্যতিক্রম দেয় যখন আমি অ্যাড এবং প্রতিস্থাপন পদ্ধতি ব্যবহার করি তখন খারাপ টোকেন ব্যতিক্রম ঘটে না তাই আমি মনে করি শো / লুকানোর পদ্ধতিটি সঠিক নয়

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