নাল প্যারামিটার সহ অ্যাডটোব্যাকস্ট্যাকের অর্থ কী?


97

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

এই ক্রিয়াকলাপটিতে সেই খণ্ডটির পদ্ধতি শেষে যে কোনও খণ্ডের জন্য নিম্নলিখিত কোডটি রয়েছে -

উদাহরণস্বরূপ - টুকরো টুকরো

MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();

সুতরাং,

1) addToBackStack(null)ক এর অনুসৃত অর্থ কী commit()?

2) আপনার কেন নাল প্যারামিটারটি পাস করতে হবে addToBackStack?

3) এভাবে যুক্ত হওয়ার পরে সেই খণ্ডটি কীভাবে পাবেন?

এই কোডটি অকার্যকর বলে মনে হচ্ছে যেহেতু আমি শেষ লাইনটি ছাড়াই কোডটি চালিয়েছি .addToBackStack(null).commit()এবং এটি কোনও সমস্যা ছাড়াই চলে।


বিকাশকারী.অ্যান্ড্রয়েড .com/references/android/app/… কিছু ক্ষেত্রে আপনাকে অবশ্যই সেই পদ্ধতিটি কল করতে হবে।
লুসিফার


4
আপনি টুকরাটির নামটি নুলের পরিবর্তে অ্যাডটোব্যাকস্ট্যাক (নাম) হিসাবে প্যারামিটার হিসাবে পাস করতে পারেন। যদি আপনি নাল পাস করেন তবে আপনি ফ্রেগমেন্টম্যানাজের.পপব্যাকস্ট্যাকমিডমিটি (স্ট্রিং নাম, ইন্ট ফ্ল্যাগ) ব্যবহার করতে পারবেন না; বা পপব্যাকস্ট্যাক (স্ট্রিং নাম, ইন্ট ফ্ল্যাগস); কারণ নাম নাল ছিল। সুতরাং পপব্যাকস্ট্যাক পদ্ধতিগুলি কাজ করবে না। আমি আপনাকে নাল পাসের পরিবর্তে পরামিতি হিসাবে ফ্রেগমেন্টের নামটি পাস করার পরামর্শ দিচ্ছি।
ভাগ্যবানলোকইন

উত্তর:


114

কমিট () দ্বারা অনুসরণ করা অ্যাডটোব্যাকস্ট্যাক (নাল) এর অর্থ কী?

দস্তাবেজের উদ্ধৃতি:

অ্যাডটোব্যাকস্ট্যাক () এ কল করে, প্রতিস্থাপনের লেনদেনটি পিছনের স্ট্যাকে সংরক্ষণ করা হয় যাতে ব্যবহারকারী লেনদেনটি উল্টাতে এবং পিছনের বোতামটি টিপে পূর্ববর্তী খণ্ডটি ফিরিয়ে আনতে পারে।

আপনি যদি লেনদেনে একাধিক পরিবর্তন যুক্ত করেন (যেমন অন্য অ্যাড () বা মুছে ফেলা ()) এবং অ্যাডটোব্যাকস্ট্যাক () কল করুন, তবে আপনি কমিট () কল করার আগে প্রয়োগ করা সমস্ত পরিবর্তনগুলি একক লেনদেন এবং পিছনের বোতাম হিসাবে ব্যাক স্ট্যাকের সাথে যুক্ত করা হবে সব একসাথে বিপরীত হবে।

আপনি যে ক্রমটিতে ফ্রেগমেন্ট ট্রান্সজেকশনে পরিবর্তন যুক্ত করেছেন তা ব্যতীত কিছু নয়:

আপনি অবশ্যই commit()শেষ কল করুন । যদি আপনি একই ধারকটিতে একাধিক টুকরো যোগ করে থাকেন তবে আপনি যে ক্রমে এগুলি যুক্ত করেছেন তা দর্শনের ক্রমবিন্যাসে প্রদর্শিত হওয়া ক্রমটি নির্ধারণ করে।

সুতরাং আপনাকে শেষ পর্যন্ত প্রতিশ্রুতিবদ্ধ হতে হবে।

টোব্যাকস্ট্যাকের জন্য কেন আপনাকে নাল প্যারামিটারটি পাস করতে হবে?

এটি নাল হওয়ার দরকার নেই, এটি স্ট্রিং হতে পারে। আপনি যদি না চান, কেবল নাল পাস করুন।

পাবলিক অ্যাবস্ট্রাক্ট ফ্র্যাগমেন্ট ট্রানজেকশন অ্যাড টোব্যাকস্ট্যাক (স্ট্রিংয়ের নাম)

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

পরামিতিগুলির নাম এই পিছনের স্ট্যাকের অবস্থার জন্য একটি alচ্ছিক নাম বা নাল।

সম্পর্কিত:

এই কোডটি অকার্যকর বলে মনে হচ্ছে যেহেতু আমি শেষ লাইনটি ছাড়াই কোডটি চালিয়েছি .এডিডিটোব্যাকস্ট্যাক (নাল) .কমিট () এবং এটি কোনও সমস্যা ছাড়াই চলে

আপনি যদি আগের টুকরোটিতে নেভিগেট করতে চান তবে এটিকে ব্যাকস্ট্যাকে যুক্ত করুন। সুতরাং আপনি ব্যাকস্ট্যাকটিতে টুকরো যোগ করতে চান কিনা তা নির্ভর করে।

এভাবে যুক্ত হওয়ার পরে কীভাবে খণ্ডটি পাওয়া যায়?

আপনার কাছে ইতিমধ্যে টুকরো টুকরো উদাহরণ রয়েছে firstFragment। সুতরাং খণ্ডটি পরে পেয়ে আপনি কী বোঝাতে চেয়েছেন তা আমি জানি না।

অধিক তথ্য @

http://developer.android.com/guide/compferences/frations.html

http://developer.android.com/references/android/app/FraamentTransaction.html#addToBackStack(java.lang.String)


আপনি এপিআই ডক থেকে আপনার উত্তরে এটি যুক্ত করতে পারেন: পিছনে স্ট্যাকটিতে এই লেনদেন যুক্ত করুন। এর অর্থ হ'ল লেনদেনটি প্রতিশ্রুতিবদ্ধ হওয়ার পরে মনে রাখা হবে এবং পরে যখন স্ট্যাকটি পপআপ করা হবে তখন তার ক্রিয়াকলাপটি বিপরীত হবে। প্যারামিটারের নাম এই পিছনের স্ট্যাকের অবস্থার জন্য একটি alচ্ছিক নাম বা নাল।
ডায়ারবার্গ

সুতরাং আমি যেমন বুঝতে পেরেছি, ব্যাকস্ট্যাক যুক্ত করার পুরো উদ্দেশ্যটি নেভিগেশন সম্পাদন করা যেমন আমরা পূর্ববর্তী খণ্ডে যাওয়ার জন্য ব্যাক বোতামটি করি?
আমার God

ঠিক আছে তাই আপনি যদি AddToBackStack- এ প্যারামিটারটি পার করছেন getFragmentManager().popBackStackImmediate()তবে ব্যাক বোতামটি প্যারামিটার পাসের সাথে / ছাড়া কেবল এটি নিজে থেকে করতে পারলে আমাদের কেন দরকার ? উত্তরটি দেখুন - স্ট্যাকওভারফ্লো.com
/

@ ওয়েডপ্রকাশ আপনার দরকার নেই এছাড়াও এটি সম্পূর্ণ একটি পৃথক প্রশ্ন এবং উত্তর। দুটি টুকরো টুকরো টুকরো করে ব্যাক স্ট্যাকটিতে যোগ করে এবং পিছনের বোতামটি টিপে আপনি সহজেই নিজেকে আবিষ্কার করতে পারেন
রঘুনন্দন

@ ওয়েডপ্রকাশ প্রকাশিত টুকরোগুলি পড়ুন @ ডেভেলপার.অ্যান্ড্রয়েড.
রঘুনন্দন

17

tagস্ট্রিং addToBackStack(String name)ফিরে স্ট্যাক খোজা পরে অবস্থান সরাসরি পপ জন্য একটি উপায় প্রদান করে। এটি পদ্ধতিতে ব্যবহৃত হতে বোঝায় popToBackStack(String name, int flags):

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

নাম: অ-শূন্য হলে, এটি অনুসন্ধানের জন্য পূর্ববর্তী পিছনের অবস্থার নাম; যদি পাওয়া যায় তবে সেই রাজ্য পর্যন্ত সমস্ত রাজ্য পপ হবে। নাম প্রকাশিত রাজ্যটি নিজেই পপ করা হয়েছে কিনা তা নিয়ন্ত্রণ করতে POP_BACK_STACK_INCLUSIVE পতাকা ব্যবহার করা যেতে পারে। যদি নাল হয় তবে কেবল শীর্ষস্থানীয় রাষ্ট্রটি পপড।

পতাকা: হয় 0 বা POP_BACK_STACK_INCLUSIVE।

অন্য কথায়, এটি আপনার পিছনে স্ট্যাকটি পপ করবে যতক্ষণ না এটি nameইন দ্বারা যুক্ত করা খণ্ডটি আবিষ্কার করে addToBackStack(String name)

উদাহরণস্বরূপ, আপনি যদি ধারাবাহিক সংযোজন করেন বা ফ্রেগমেন্ট ম্যানেজারের নাম "ভঙ্গ 1", "ভঙ্গ 2", "ভঙ্গ 3", "ভঙ্গ 4" রেখে দেয় এবং পরে অ্যাডটোব্যাকস্ট্যাকের সাথে যোগ করা টুকরাটিতে সরাসরি ফিরে যেতে চান (" ভঙ্গুর "", আপনি কল popToBackStack("frag2", 0)

সুতরাং,

  • ব্যবহার করুন .addToBackStack("fragName"): আপনি যদি পরে popToBackStack(String name, int flags)একের বেশি স্ট্যাক পপ করতে চান তবে ।

  • ব্যবহার .addToBackStack(null): আপনি যদি পরে একের বেশি স্ট্যাক পপ না করতে চান তবে এখনও একবারে একটি পপ করতে চান। আপনি পপটোব্যাকস্ট্যাক () স্পষ্টভাবে কল না করলেও এটি করুন তবে এর পরিবর্তে ব্যাক প্রেসটি ডিফল্ট প্রয়োগটি ব্যাক স্ট্যাকটিকে পরিচালনা করতে দেবে।

  • ব্যবহার .disallowAddToBackStack(): আপনি যদি ব্যাক টিপুন না চান বা পপব্যাকস্ট্যাক () এ স্পষ্টভাবে কল করুন। এটি নিশ্চিত করবে যে কোডটির কোনও অংশই .addToBackStack () ব্যবহার করছে না।


1

আপনার উত্তর হ্রাস করা হয়। আপনি যদি ব্যাক স্ট্যাকটিতে টুকরো যোগ করতে না চান তবে আপনার নীচের কোডের স্নিপেট ব্যবহার করা উচিত:

    public static void replaceFragment (@NonNull FragmentManager fragmentManager,
            @NonNull Fragment fragment, int frameId){

        checkNotNull(fragmentManager);
        checkNotNull(fragment);
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(frameId, fragment);
        transaction.disallowAddToBackStack(); // <-- This makes magic!
        transaction.commit();
    }

নীচে এটি কীভাবে ব্যবহার করবেন তার সুন্দর উদাহরণ রয়েছে:

GameFragment fragment = GameFragment.newInstance(mGameObject, currentQuestion);
ActivityUtils.replaceFragment(getFragmentManager(), fragment, R.id.main);

6
অবমানিত কোথায়? আমি ডকুমেন্টেশন বা ফ্রেগমেন্ট ট্রানজেকশন উত্সটিতে কিছুই দেখতে পাচ্ছি না।
রুপ

4
সাবধান, যদি আপনি থাকেন disallowAddToBackStackতবে ভবিষ্যতে অ্যাডটোব্যাকস্ট্যাকের যে কোনও কল কল ইলিজালস্টেটএক্সসেপশন নিক্ষেপ করবে। যদি অ্যাডটোব্যাকস্ট্যাক ইতিমধ্যে কল করা হয়ে থাকে তবে এই পদ্ধতিটি ইলিজেলস্টেটএক্সসেপশন নিক্ষেপ করবে।
কাঠির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.