631 Stimmen

Wie implementiert man onBackPressed() in Fragments?

Gibt es eine Möglichkeit, wie wir die onBackPressed() in Android Fragment ähnlich wie in Android Activity implementieren?

Da der Fragment-Lebenszyklus nicht über onBackPressed() . Gibt es eine andere alternative Methode zur Überwindung onBackPressed() in Android 3.0-Fragmenten?

1voto

Mohd Asim Punkte 633

Versuchen Sie dies, wenn Sie wirklich onBackPressed() in Fragment aktivieren wollen. Nachdem ich eine Stunde Zeit vergeudet hatte, habe ich diese Lösung gefunden, die genau den Anforderungen entspricht, die ich aus meinen früheren Erfahrungen kenne.

Sie müssen sich nur auf den Wert der private int STATUS_FRAGMENT=0; die den Bedarf von addToBackStack() in Bruchstücken.

import android.view.MenuItem;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;

import com.example.growfast.NavigationItemsFolder.CoreFragments.Cart;
import com.example.growfast.NavigationItemsFolder.CoreFragments.HelpDesk;
import com.example.growfast.NavigationItemsFolder.CoreFragments.Home;
import com.example.growfast.NavigationItemsFolder.CoreFragments.ProfileDetails;
import com.example.growfast.R;
import com.google.android.material.bottomnavigation.BottomNavigationView;

public class BusinessManagement extends AppCompatActivity {

    public BottomNavigationView bottomNavigationView;
    private int STATUS_FRAGMENT=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base_layout);
        setBottomNavigationMenu();

    }

    private void setBottomNavigationMenu() {
        bottomNavigationView = findViewById(R.id.navigation);
        bottomNavigationView.setVisibility(View.VISIBLE);

        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {

            Fragment fragment = null;

            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                switch (item.getItemId()) {

                    case R.id.action_home:
                        fragment = new Home();
                        break;

                    case R.id.action_profile:
                        fragment = new ProfileDetails();
                        break;
                    case R.id.action_cart:
                        fragment = new Cart();
                        break;
                    case R.id.action_favourites_menu:
                        fragment = new HelpDesk();
                        break;

                }
                return loadFromFragment(fragment);

            }
        });
        bottomNavigationView.setSelectedItemId(R.id.action_home);
    }

    private boolean loadFromFragment(Fragment fragment) {
        if (fragment != null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.my_container, fragment)
                    .commit();
            STATUS_FRAGMENT=1;
            return true;
        }
        return false;
    }

    @Override
    public void onBackPressed() {
        if (STATUS_FRAGMENT==1) {
            bottomNavigationView.setSelectedItemId(R.id.action_home);
            STATUS_FRAGMENT=0;
            bottomNavigationView.setVisibility(View.VISIBLE);
        }
        else{
            super.onBackPressed();
        }
    }

}```

0voto

fazal ur Rehman Punkte 95

Im Falle von Kotlin verwenden Sie diesen onAttach-Callback

        override fun onAttach(context: Context) {
          super.onAttach(context)
           val callback: OnBackPressedCallback = object : 
                 OnBackPressedCallback(true) {
                 override fun handleOnBackPressed() {
                 // your onbackpressed code 

            }
          }
      requireActivity().onBackPressedDispatcher.addCallback(this, callback)
      }

0voto

Md Manna Punkte 51
private boolean isMainFragment = true;

@Override
public void onBackPressed() {

    if (isMainFragment){
        finish();
    }else {
        getSupportFragmentManager().popBackStack();
        isMainFragment = true;
    }
}

Wenn Sie ein anderes Fragment öffnen, fügen Sie einfach

isMainFragment = false;

es ist die Arbeit mit mir

0voto

Anwar Zahid Punkte 166

Hier ist meine Antwort auf das Fragment auf die Schaltfläche zurück gedrückt zu behandeln. Ich habe die untere Navigation mit fünf Elementen (A, B, C, D, E), die ich mit der Aktivität verbinde, wenn ich auf ein Element klicke, verbinde ich das Fragment mit der Aktivität. Angenommen, ich klicke auf Element (A) und füge das Fragment (A) hinzu, und wenn ich dann auf Element (B) klicke, füge ich das Fragment (B) hinzu und so weiter.

Der Fluss von Click item. A->B->C->D->E

Der Fluss der gedrückten Zurück-Taste. E->D->C->B->A

 @Override
        public void onBackPressed() {
            int count = getSupportFragmentManager().getBackStackEntryCount();
            if (count == 0) {
                super.onBackPressed();
            } else {
                int index = ((getSupportFragmentManager().getBackStackEntryCount()) -1);
                getSupportFragmentManager().popBackStack();
                FragmentManager.BackStackEntry backEntry = getSupportFragmentManager().getBackStackEntryAt(index);
                int stackId = backEntry.getId();
                bottomNavigationView.getMenu().getItem(stackId).setChecked(true);
            }
        }

Here the demo is

0voto

Mahesh Pandit Punkte 320

Implementieren Sie in Ihrer mainActivity die Schnittstelle für Callback

protected mainActivity.OnBackPressedListener onBackPressedListener;

public interface OnBackPressedListener {
    void doBack();
}

public void setOnBackPressedListener(mainActivity.OnBackPressedListener onBackPressedListener) {
    this.onBackPressedListener = onBackPressedListener;
}

@Override
public void onBackPressed() {
    if (onBackPressedListener != null) {
        onBackPressedListener.doBack();
    } else { 
        super.onBackPressed();
    }
}

auf Fragment implementieren intefrace OnBackPressedListener, die wir in mainActivity schreiben wie

implements mainActivity.OnBackPressedListener

mainActivity ist meine Basisaktivität schreiben Sie folgenden Code in Ihrem Fragment onCreateView Methode

((mainActivity) getActivity()).setOnBackPressedListener(this);

und implementieren die Methode doBack der Schnittstelle OnBackPressedListener

@Override
public void doBack() {
    //call base fragment 
}

Rufen Sie nun das Fragment auf, das Sie mit der doBack()-Methode aufrufen möchten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X