পিছনের বোতামের মতো বাটন ব্যবহার করে কীভাবে বর্তমান খণ্ডটি বন্ধ করবেন?


89

আমি ইমেজবটন ব্যবহার করে বর্তমান খণ্ডটি বন্ধ করার চেষ্টা করেছি।

আমি ফ্রেগমেন্ট-এ তে রয়েছি এবং আমি বোতামটি ক্লিক করলে এটি ফ্রেগমেন্ট-বি তে পরিণত হবে।

এবং আমি ফ্রেগমেন্ট-বি-তে বোতামটি ক্লিক করার পরে এটি খণ্ড-সিতে পরিণত হবে এবং খণ্ড-বি বন্ধ হবে close

আমি যদি ফ্র্যাগমেন্ট-সি-তে ব্যাক বোতামটি ক্লিক করি তবে তা খণ্ড-এ-তে ফিরে আসবে।

আমার চেষ্টা করা কোডটি নীচের মতো

camera_album = (ImageButton) view.findViewById(R.id.camera_album);

camera_album.setOnClickListener(new Button.OnClickListener() {
    @Override
    public void onClick(View v) {

                    closefragment();
        Fragment fragment = FileBrowserFragment.newInstance(null, null, null) ;
        MainActivity.addFragment(LocalFileBrowserFragment.this, fragment) ;


    }
});

private void closefragment() {
    getActivity().getFragmentManager().beginTransaction().remove(this).commit();
}

আমি যখন খণ্ড-বিতে পিছনের বোতামটি ক্লিক করি তখন তা খণ্ড-সি তে পরিণত হয়।

তবে আমি যখন ফ্র্যাগমেন্ট-সি-এর ব্যাক বোতামটি ক্লিক করি তখন তা খণ্ড-এ-তে ফিরে আসে না। এটি খালি পটভূমিতে ফিরে আসে। আমি যদি খণ্ড-এ এ ফিরে যেতে চাই, আমাকে আবার ফিরে বোতামটি ক্লিক করতে হবে।

সুতরাং, বর্তমান খণ্ডটি সম্পূর্ণরূপে বন্ধ হয় না বলে মনে হয়।

কীভাবে বর্তমান টুকরোটি অ্যান্ড্রয়েডের ব্যাক বোতামের মতো শেষ করবেন?


এটা কি MainActivity.addFragment(LocalFileBrowserFragment.this, fragment)??। আপনি খণ্ডটি ব্যাকস্টকে যুক্ত করতে হবে এবং সেই অনুযায়ী পপ করতে হবে
রঘুনন্দন

ফাংশন অ্যাডফ্রেগমেন্টে খণ্ড যুক্ত হয়েছে।
Wun

কি এবং একটি ক্রিয়াকলাপ পদ্ধতিতে খণ্ড যুক্ত করুন ??
রঘুনন্দন

4
getActivity ()। onBackPressed (); এটি করতে পারেন
বিশ্বনাথ লেকসমানান

উত্তর:


82

খণ্ড A থেকে, B এ যেতে, A কে B এর সাথে প্রতিস্থাপন করুন এবং এর addToBackstack()আগে ব্যবহার করুন commit()

এখন খণ্ড খ থেকে শুরু করে সি-তে যান, প্রথমে ব্যবহার করুন popBackStackImmediate(), এটি এটিকে আবার এনে দেবে, এখন প্রথম লেনদেনের মতো এটিকে সি এর সাথে প্রতিস্থাপন করুন।


4
ইউএসএনপি পপস্ট্যাকআইমিডিয়েট (): -> গেটভিউ () .সোনকিরলিস্টনার (নতুন ভিউ.অনকিএলাইস্টেনার () {@ ওভাররাইড পাবলিক বুলিয়ান অনকি (দেখুন ভি, ইন কী কীড, কীভারেন্ট ইভেন্ট) {যদি (কীকোড == কীইভেনড.ক্যাকটিভিটি) { .getSupportFragmentManager () .পপব্যাকস্ট্যাকমিডিয়েট (); সত্য প্রত্যাবর্তন;} মিথ্যা প্রত্যাবর্তন;}});
যশ আগরওয়াল

134

আমি কোডটি পরিবর্তন করি getActivity().getFragmentManager().beginTransaction().remove(this).commit();

প্রতি

getActivity().getFragmentManager().popBackStack();

এবং এটি খণ্ডটি বন্ধ করতে পারে।


36
getActivity ()। onBackPressed (); থিক এটি আপনি যা ব্যাখ্যা করেছেন তা করবে।
বিশ্বনাথ লেকশ্মানন

4
@ suomi35 নং আপনার যখন ব্যাকপ্রেসড () -কে ওভাররাইডের দরকার হয় তখন আপনি এ জাতীয় উপলব্ধি নিয়ে সমস্যার মুখোমুখি হন
Le_Enot

মনে হয় না কাজ। ২০১ in সালে সেটনাভিশনঅনক্লিকলিস্টারে কাজ করে না।

4
@ বিশ্বনাথলক্ষমানান আমি মনে করি এটি কোনও মন্তব্যের পরিবর্তে উত্তর হওয়া উচিত। এবং স্বীকৃত উত্তর, অতিরিক্ত।
ফ্রান্সিসকো রোমেরো

4
এটি ক্রিয়াকলাপটিও বন্ধ করে দেয়! কেবল খণ্ড খণ্ডন বন্ধ হওয়া আবশ্যক।
জোন

72

যাদের সহজ উপায়টি বের করতে হবে তাদের জন্য

চেষ্টা করুন getActivity().onBackPressed();


getActivity () অনেক সময় শূন্য হতে পারে।
অর্পিত জে

4
@ আরপিটজে অনটচ () বলা হওয়ার আগে এটি কেবল নালিশ, কোনও খণ্ড কোনও ক্রিয়াকলাপ ছাড়া বাঁচতে পারে না।
তামিম আতাফি

@ তামিমআত্তাফি সত্য, তবে আমি ঘূর্ণন বা ক্রিয়াকলাপ সমাপ্তের মতো মামলার বিষয়ে উল্লেখ করছিলাম এবং কোনও কারণে খণ্ড খণ্ডের ঘটনা এখনও রয়েছে তবে এটি বাতিল হয়ে যাবে।
অর্পিত জে।

popBackStack()এবং popBackStackImmediate()একটি বোতাম টিপস অনুকরণ না করে শীর্ষতম খণ্ডটি পপিংয়ের আরও সরাসরি উপায়। onBackPressed()ট্রিগার OnBackPressedCallbackগুলি ব্যবহার করে ; যদি ভবিষ্যতে আপনি ব্যাক বোতাম টিপুন বিশেষভাবে পরিচালনা করতে চান তবে কলব্যাকগুলি প্রোগ্রামগতভাবে ট্রিগার করা এড়াতে আপনাকে popBackStack()/ স্যুইচ করতে হবে popBackStackImmediate()
নোলান অ্যামি

আপনি এই কোডটি ফ্রেগমেন্টের বোতামগুলির অনক্লিক পদ্ধতিতে রেখেছেন।
আনন

6

getActivity().onBackPressedআপনার যা প্রয়োজন তা করে এটি প্যারেন্ট ক্রিয়াকলাপে স্বয়ংক্রিয়ভাবে অনব্যাকপ্রেসড পদ্ধতিটিকে কল করে ।


5

এটি করার একটি কোটলিন উপায়, আমি খণ্ড লেআউটে বোতামটি তৈরি করেছি এবং তারপরে অনভিউক্রিটেটেডে ক্লিকলিস্টনার সেট করেছি set

@ বিশ্বনাথ-লেকশমানান মন্তব্য অনুসারে

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) 
{
     super.onViewCreated(view, savedInstanceState)

     btn_FragSP_back.setOnClickListener {
        activity?.onBackPressed()
    }
}

এটি
খণ্ডন

4

এটা চেষ্টা কর:

ft.addToBackStack(null);   // ft is FragmentTransaction

সুতরাং, যখন আপনি ব্যাক-কী টিপেন , বর্তমান ক্রিয়াকলাপটি (যা একাধিক টুকরো ধারণ করে) নিজেকে শেষ করার পরিবর্তে পূর্ববর্তী খণ্ডটি লোড করবে।


4

এটা চেষ্টা কর:

public void removeFragment(Fragment fragment){
    android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    fragmentTransaction.remove(fragment);
    fragmentTransaction.commit();
}

4

আপনি এই যুক্তিটি চেষ্টা করতে পারেন কারণ এটি আমার পক্ষে কাজ করা হয়েছে।

frag_profile profile_fragment = new frag_profile();

boolean flag = false;
@SuppressLint("ResourceType")
public void profile_Frag(){
    if (flag == false) {
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        manager.getBackStackEntryCount();
        transaction.setCustomAnimations(R.anim.transition_anim0, R.anim.transition_anim1);
        transaction.replace(R.id.parentPanel, profile_fragment, "FirstFragment");
        transaction.commit();
        flag = true;
    }

}

@Override
public void onBackPressed() {
    if (flag == true) {
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        manager.getBackStackEntryCount();
        transaction.remove(profile_fragment);
        transaction.commit();
        flag = false;
    }
    else super.onBackPressed();
}

3
Button ok= view.findViewById(R.id.btSettingOK);
Fragment me=this;
ok.setOnClickListener( new View.OnClickListener(){
    public void onClick(View v){
     getActivity().getFragmentManager().beginTransaction().remove(me).commit();
    }
});

4
এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এই কোডটির প্রশ্নের উত্তর কীভাবে তার দীর্ঘমেয়াদী মানকে উন্নত করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করে।
রোলস্টুহফলাহার

4
এই সাধারণ কোডটি এটির ঠিক আছে বা বন্ধ করুন বোতামের মাধ্যমে বর্তমান খণ্ডটি দৃশ্যটি সরিয়ে দেয়। আমি এটি একটি টুকরো হিসাবে প্রদর্শিত একটি হালকা সেটিং প্যানেল ছাড়ার জন্য ব্যবহার করি এবং ক্রিয়াকলাপে ফিরে যাই। এই কৌশলটির জন্য দুঃখিত তবে অ্যান্ড্রয়েড 8 এর অধীনে, আমি মনে করি এটি একাধিক ফ্রেগমেন্ট পরিচালনা করা এতটা ব্যবহারিক নয়।
ব্রুনো এল

1

আপনার যদি পিছনের বোতামটি দিয়ে আরও বিশেষভাবে ক্রিয়াটি পরিচালনা করতে হয় তবে আপনি নীচের পদ্ধতিটি ব্যবহার করতে পারেন:

view.setFocusableInTouchMode(true);
view.requestFocus();
view.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if( keyCode == KeyEvent.KEYCODE_BACK )
        {
            onCloseFragment();
            return true;
        } else {
            return false;
        }
    }
});

0

আপনার খণ্ডগুলিতে onCreateView(...)আপনি কল করে একটি দৃশ্য সরিয়ে ফেলতে পারেন container.removeView(view);। সুতরাং আপনি যদি খণ্ডটি মুছে ফেলতে চান তবে viewতার ফিরতি মান হওয়া উচিত onCreateView,

উদাহরণ স্বরূপ

    public View onCreateView(...){
        final View view = inflater.inflate(R.layout.your_fragments_layout,container,false);
        //Do something
        finishButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                container.removeView(view);
            }
        });
        return view;
    }


-8

আর একবার চেষ্টা কর

getActivity().finish();

4
আপনার উত্তরটি আরও ব্যাখ্যা করার চেষ্টা করুন, যাতে ভবিষ্যতে এই প্রশ্নে ফিরে আসা উত্তরটি ওপি এবং অন্যান্য লোকদের পক্ষে বুঝতে সহজ হয়
আমান ছাবরা

7
এটি পুরো ক্রিয়াকলিকে বন্ধ করে দেয়, খণ্ডটি নয়
বুসু

এটা আমাকে সাহায্য করেছে। যারা আরও তথ্য চান তারা এটি গুগল করতে পারেন। অফিসিয়াল ডকুমেন্টেশন এখানে কপিপস্ট করার দরকার নেই।
Alesha170

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