Fragment'larda onBackPressed() nasıl uygulanır?

Android Activity'de uyguladığımıza benzer şekilde Android Fragment'ta onBackPressed() uygulayabileceğimiz bir yol var mı?

Fragment yaşam döngüsünde onBackPressed() bulunmadığından. Android 3.0 fragmentlerinde onBackPressed() işlevini aşmak için başka bir alternatif yöntem var mı?

HaMMeRed'in cevabına göre nasıl çalışması gerektiğinin sözde kodu burada. Diyelim ki ana aktivitenizin adı BaseActivity ve alt parçaları var (SlidingMenu lib örneğinde olduğu gibi). İşte adımlar:

Öncelikle arayüz oluşturmamız ve jenerik metoda sahip olmak için arayüzünü uygulayan sınıf oluşturmamız gerekir

  1. Sınıf arayüzü OnBackPressedListener oluşturun

    public arayüz OnBackPressedListener {
        public void doBack();
    }
  2. OnBackPressedListener` becerilerini uygulayan bir sınıf oluşturun

    public class BaseBackPressedListener implements OnBackPressedListener {
        private final FragmentActivity activity;
    
        public BaseBackPressedListener(FragmentActivity activity) {
            this.activity = activity;
        }
    
        @Override
        public void doBack() {
            activity.getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        }
    }
  3. Şu andan itibaren BaseActivity kodumuz ve onun parçaları üzerinde çalışacağız

  4. Sınıfınız BaseActivity üzerinde özel dinleyici oluşturun

    protected OnBackPressedListener onBackPressedListener;
  5. BaseActivity içinde dinleyici ayarlamak için yöntem oluşturun

    public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) {
        this.onBackPressedListener = onBackPressedListener;
    }
  6. override onBackPressed içinde bunun gibi bir şey uygulayın

    @Override
    public void onBackPressed() {
        if (onBackPressedListener != null)
            onBackPressedListener.doBack();
        else
            super.onBackPressed();
  7. onCreateView içindeki fragmanınızda dinleyicimizi eklemelisiniz

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        etkinlik = getActivity();
    
        ((BaseActivity)activity).setOnBackPressedListener(new BaseBackPressedListener(activity));
    
        Görünüm = ... ;
    //görünüm ile ilgili şeyler
    
        dönüş görünümü;
    }

İşte, şimdi fragmanda geri tıkladığınızda özel on back yönteminizi yakalamanız gerekir.

Yorumlar (6)

Bu tür bir işlevsellik istiyorsanız, bunu etkinliğinizde geçersiz kılmanız ve ardından tüm parçalarınıza, geri düğmesine her basıldığında ilgili parçada çağırdığınız bir YourBackPressed arayüzü eklemeniz gerekir.

Düzenleme: Önceki cevabıma ekleme yapmak istiyorum.

Bunu bugün yapacak olsaydım, bir yayın kullanırdım veya diğer panellerin ana/ana içerik paneliyle birlikte güncellenmesini bekliyorsam muhtemelen sıralı bir yayın kullanırdım.

Destek Kütüphanesindeki LocalBroadcastManager bu konuda yardımcı olabilir ve yayını onBackPressed içinde gönderir ve önemseyen parçalarınıza abone olursunuz. Messaging'in daha ayrık bir uygulama olduğunu ve daha iyi ölçekleneceğini düşünüyorum, bu yüzden şu anda resmi uygulama önerim bu olacaktır. Sadece Intent'in eylemini mesajınız için bir filtre olarak kullanın. yeni oluşturduğunuzACTION_BACK_PRESSED'i gönderin, aktivitenizden gönderin ve ilgili fragmanlarda dinleyin.

Yorumlar (7)

Aşağıdaki gibi parçalarınız arasında geçiş yaparken addToBackStack eklemeniz yeterlidir:

fragmentManager.beginTransaction().replace(R.id.content_frame,fragment).addToBackStack("tag").commit();

addToBackStack(null)` yazarsanız, bunu kendisi halledecektir, ancak bir etiket verirseniz, bunu manuel olarak halletmeniz gerekir.

Yorumlar (3)