web-dev-qa-db-de.com

Wie kann ich das aktuelle Fragment mit Button wie dem Zurück-Button schließen?

Ich habe versucht, das aktuelle Fragment mit Imagebutton zu schließen.

Ich bin in Fragment-A und es wird sich das Fragment-B anzeigen, wenn ich auf die Schaltfläche klicke.

Wenn ich bei Fragment-B auf die Schaltfläche klicke, wird das Fragment-C angezeigt und das Fragment-B geschlossen.

Wenn ich bei Fragment-C auf die Schaltfläche "Zurück" klicke, wird wieder das Fragment-A angezeigt.

Der Code, den ich probiert habe, ist wie folgt 

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();
    }

Wenn ich bei Fragment-B auf die Schaltfläche "Zurück" klicke, wird das Fragment-C angezeigt. 

Wenn ich jedoch auf die Schaltfläche "Zurück" in Fragment-C klicke, kehrt das Fragment-A nicht zurück, sondern in den leeren Hintergrund. Wenn ich zu Fragment-A zurückkehren möchte, muss ich erneut auf die Schaltfläche "Zurück" klicken.

SO scheint das aktuelle Fragment nicht abgeschlossen zu sein.

Wie beende ich das aktuelle Fragment wie die Zurück-Taste von Android?

54
Wun

Um von Fragment A zu B zu gelangen, ersetzen Sie A durch B und verwenden Sie addToBackstack() vor commit().

Um nun von Fragment B zu C zu gelangen, verwenden Sie zuerst popBackStackImmediate(). Dies bringt A zurück. Ersetzen Sie nun A durch C, genau wie bei der ersten Transaktion.

52
S.D.

Ich ändere den Code von getActivity().getFragmentManager().beginTransaction().remove(this).commit();

zu 

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

Und es kann das Fragment schließen.

93
Wun

Für diejenigen, die einen einfachen Weg finden müssen

getActivity().onBackPressed(); ausprobieren

43

Versuche dies:

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

Wenn Sie also back-key drücken, lädt die aktuelle Aktivität (die mehrere Fragmente enthält) das vorherige Fragment und nicht das Ende.

4
Shylendra Madda

Dies ist eine Kotlin-Methode. Ich habe eine Schaltfläche im Fragment-Layout erstellt und dann onClickListner in onViewCreated gesetzt. 

laut @ Viswanath-Lekshmanan Kommentar

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

     btn_FragSP_back.setOnClickListener {
        activity.onBackPressed()
    }
}
3
Abdul Rehman

Sie können diese Logik ausprobieren, weil sie für mich funktioniert.

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();
}
2
user8595527

Versuche dies:

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();
}
2
None
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();
        }
    });
1
Bruno L.

getActivity().onBackPressed erledigt alles was Sie brauchen. In der übergeordneten Aktivität wird automatisch die Methode onBackPressed aufgerufen.

1

Wenn Sie die Aktion spezifischer mit der Zurück-Schaltfläche ausführen müssen, können Sie die folgende Methode verwenden:

    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;
            }
        }
    });
1
user6683868

Probier diese

getActivity().finish();
0
Karan Chunara