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
Sınıf arayüzü OnBackPressedListener
oluşturun
public arayüz OnBackPressedListener {
public void doBack();
}
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);
}
}
Şu andan itibaren BaseActivity
kodumuz ve onun parçaları üzerinde çalışacağız
Sınıfınız BaseActivity
üzerinde özel dinleyici oluşturun
protected OnBackPressedListener onBackPressedListener;
BaseActivity
içinde dinleyici ayarlamak için yöntem oluşturun
public void setOnBackPressedListener(OnBackPressedListener onBackPressedListener) {
this.onBackPressedListener = onBackPressedListener;
}
override onBackPressed
içinde bunun gibi bir şey uygulayın
@Override
public void onBackPressed() {
if (onBackPressedListener != null)
onBackPressedListener.doBack();
else
super.onBackPressed();
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.
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ğunuz
ACTION_BACK_PRESSED'i gönderin, aktivitenizden gönderin ve ilgili fragmanlarda dinleyin.
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.