একটি খণ্ড থেকে বর্তমান ক্রিয়াকলাপ সমাপ্ত


98

আমি নেভিগেশন ড্রয়ার হিসাবে ব্যবহার করছি এমন একটি ক্রিয়াকলাপে আমার একটি খণ্ড রয়েছে। এটিতে এমন বোতাম রয়েছে যা ক্লিক করা হয় যখন নতুন ক্রিয়াকলাপগুলি শুরু করা হয় (কোনও খণ্ড থেকে স্টার্টঅ্যাক্টিভিটি কেবল বর্তমান ক্রিয়াকলাপের উপর স্টার্টঅ্যাক্টিভিটি কল করে)।

আমার জীবনের জন্য আমি কোনও নতুন শুরু করার পরে কীভাবে বর্তমান ক্রিয়াকলাপটি শেষ করব তা অনুভব করতে পারি না।

আমি খণ্ডে এই জাতীয় কিছু অর্জন করতে চাই:

@Override
public void onClick(View view) {
    // TODO Auto-generated method stub
    if (view == mButtonShows) {
        Intent intent = new Intent(view.getContext(), MyNewActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    } 
}

তবে দেখে মনে হচ্ছে ফ্রেগমেন্ট.ক্লাস ফিনিস () এটি স্টার্টএকটিভিটি (...) প্রয়োগ করে implement

আমি চাই যে তারা যখন দ্বিতীয় ক্রিয়াকলাপটি চালু করবে তখন কার্যকলাপটির ব্যাকস্ট্যাক সাফ হয়ে যায়। (সুতরাং নতুন ক্রিয়াকলাপ থেকে পিছনে চাপলে প্রযুক্তিগতভাবে তাদের আবার লঞ্চারে ফেলে দেওয়া হবে)

উত্তর:


285

টুকরা দিয়ে কাজ thisকরার সময়, প্রসঙ্গটি ব্যবহার বা উল্লেখ করার পরিবর্তে সর্বদা ব্যবহার করুন getActivity()। আপনার ফোন করা উচিত

getActivity().finish();

খণ্ডগুলি থেকে আপনার ক্রিয়াকলাপ শেষ করতে।


12
getActivity()nullকিছু ক্ষেত্রে হতে পারে । আমাদের তখন কী করা উচিত?
মাতাজাজ ক্রিস্টল

4
@ user983956 এ জাতীয় কার্যকলাপ ইতিমধ্যে ধ্বংস হয়ে গেছে, কেবল কল করবেন না finish
ক্রিশ্চিয়ান

4
একটি টিপ হিসাবে: getActivity নথ হতে পারে যদি আপনি ভিউ inflating আগে এটি ব্যবহার করার চেষ্টা করেন
সান্নামাস

4
ক্রিয়াকলাপটি খণ্ডক নয়, নিয়ন্ত্রক / ইনচার্জ হওয়া উচিত, আপনার কলবিব্যাক ইন্টারফেসের পরিবর্তে ক্রিয়াকলাপটি কলব্যাক করা উচিত এবং ক্রিয়াকলাপটি নিজেই শেষ করতে হবে কিনা তা সিদ্ধান্ত নিতে দিন।
আহমেদ

4
এছাড়াও, যদি আপনার ক্রিয়াকলাপে সিঙ্গেলনগুলি ইনজেকশন দেওয়া থাকে তবে সেগুলি ধ্বংস করতে ভুলবেন না, এটি মেমরি ফাঁস তৈরি করবে, বা যদি কলব্যাক রয়েছে তবে সেগুলি মুছে ফেলবে। , যদি (getActivity ()! = নাল) {getActivity ()। অপসারণ কলব্যাকস (); getActivity ()। ধ্বংস (); }
ওমার্সেম

26

অাসলে ভাল...

আমার খণ্ডটির ক্রিয়াকলাপ শেষ করার চেষ্টা হবে না। এটি আমার মতে ফ্রেগমেন্টের উপর অত্যধিক কর্তৃত্ব রাখে। পরিবর্তে, আমি এখানে গাইডটি ব্যবহার করব: http://developer.android.com/training/basics/framents/communicating.html

খণ্ডটি এমন একটি ইন্টারফেস সংজ্ঞা দেয় যা ক্রিয়াকলাপটি বাস্তবায়ন করে। ক্রিয়াকলাপে কল করুন, তারপরে ক্রিয়াকলাপটি তথ্যের সাথে কী করবে decide ক্রিয়াকলাপ যদি নিজেকে শেষ করতে চায় তবে তা পারে।


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

11

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

নীচের কোডটি একটি ক্রিয়াকলাপ এবং টুকরা থেকে একটি স্নিপেট যা একটি সংরক্ষণ এবং বাতিল বোতাম আছে।

প্লেয়ারঅ্যাক্টিভিটি

public class PlayerActivity extends Activity 
    implements PlayerInfo.PlayerAddListener {

    public void onPlayerCancel() {
       // Decide if its suitable to close the activity, 
       //e.g. is an edit being done in one of the other fragments?
       finish();
    }
}

প্লেয়ারআইনফ্রেগমেন্ট, এতে একটি ইন্টারফেস রয়েছে যা কলিং ক্রিয়াকলাপটি প্রয়োগ করা প্রয়োজন।

public class PlayerInfoFragment extends Fragment {
   private PlayerAddListener callback; // implemented in the Activity

   @Override
   public void onAttach(Activity activity) {
     super.onAttach(activity);
     callback= (PlayerAddListener) activity;
   }

   public interface PlayerAddListener {
       public void onPlayerSave(Player p); // not shown in impl above
       public void onPlayerCancel();
   }

   public void btnCancel(View v) {
      callback.onPlayerCancel(); // the activity's implementation
   }
}

2

খণ্ড থেকে ক্রিয়াকলাপ শেষ করতে আপনার getActivity () পদ্ধতিটি ব্যবহার করা উচিত।

getActivity().finish();

1

আমি যখনই খণ্ডটি বন্ধ করতে ফিনিসটি ব্যবহার করি তখন পুরো ক্রিয়াকলাপ বন্ধ হয়ে যায়। দস্তাবেজ অনুসারে, পিতামাতার ক্রিয়াকলাপ যতক্ষণ অবধি টুকরো টুকরো থাকবে।

পরিবর্তে, আমি খুঁজে পেয়েছি যে আমি এই বিবৃতিটি ব্যবহার করে পিতামাতার ক্রিয়াকলাপটি ফিরিয়ে দিতে পারি: setContentView (R.layout.activity_main);

এটি আমাকে পিতামাতার ক্রিয়াকলাপে ফিরিয়ে দেয়।

আমি আশা করি এটি এটির জন্য অনুসন্ধান করা অন্য কাউকে সহায়তা করে।


1

খুব সহজ...

1- getActivity()খণ্ড খণ্ডে কেবল ক্রিয়াকলাপ দখল করুন

2- তারপরে কল করুন finish();

সুতরাং কেবল getActivity().finish();পিতামাতার ক্রিয়াকলাপ শেষ করবে।


1

অংশটি ব্যবহার getActivity.finishAffinity ()

getActivity().finishAffinity();

এটি ক্রিয়াকলাপ সহ স্ট্যাক থেকে বর্তমান ক্রিয়াকলাপ দ্বারা চালিত সমস্ত খণ্ডকে সরিয়ে ফেলবে ...


ফিনিশএফিনিটি () একই ক্রিয়াকলাপযুক্ত সমস্ত ক্রিয়াকলাপ সরিয়ে ফেলবে, সুতরাং বর্তমান ক্রিয়াকলাপের নীচে যে ক্রিয়াকলাপগুলি স্ট্যাকের মধ্যে রয়েছে সেগুলিও শেষ করা যেতে পারে।
জাকারিয়া এম জাওয়াস

0

এটা চেষ্টা কর. কোনও সতর্কতা থাকা উচিত নয় ...

            Activity thisActivity = getActivity();
            if (thisActivity != null) {
                startActivity(new Intent(thisActivity, yourActivity.class)); // if needed
                thisActivity.finish();
            }

0

15202020 - আপডেট উত্তর।

আপনার কাছে জাভা এবং কোটলিনের জন্য দুটি বিকল্প রয়েছে। তবে উভয় উপায়ে যুক্তি একরকম are কল ফিনিস () পদ্ধতির পরে আপনার ক্রিয়াকলাপ কল করা উচিত ।

কোটলিনের উত্তর ,

আপনার ক্রিয়াকলাপ যদি শূন্য না হতে পারে তবে উত্তর_1 ব্যবহার করুন । তবে, যদি আপনার ক্রিয়াকলাপ নালার হতে পারে তবে উত্তর_2 ব্যবহার করুন

Answer_1: activity!!.finish()
Answer_2: activity?.finish()

জাভা এর উত্তর,

getActivity().finish();

নিবন্ধন করুন


0

এটিকে অ্যান্ড্রয়েড জেটপ্যাকের টুকরোটিতে সর্বশেষ আপডেটের প্রয়োজন নেই

requireActivity().finish();

-1

এটি ব্যবহার করার চেষ্টা করুন

হ্যাঁ Fragment.classবাস্তবায়ন হয় নাfinish()

খণ্ডগুলি নিয়ে কাজ করার সময় এটি ব্যবহার করার পরিবর্তে বা প্রসঙ্গটি উল্লেখ করার পরিবর্তে সর্বদা ব্যবহার করুন getActivity()। আপনার ফোন করা উচিত


11
আপনার উত্তর এবং উপরের প্রথম উত্তরের মধ্যবর্তী দ্বিধা সম্পর্কে বলুন (@ কোডার_ফোর্ড_লাইফ 22 দ্বারা) ...
ফিলিপ ব্রিটো

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