Bir DialogFragment'tan sonuç almanın çok daha basit bir yolu var.
İlk olarak, Etkinlik, Fragman veya FragmentActivity'de aşağıdaki bilgileri eklemeniz gerekir:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Stuff to do, dependent on requestCode and resultCode
if(requestCode == 1) { // 1 is an arbitrary number, can be any int
// This is the return result of your DialogFragment
if(resultCode == 1) { // 1 is an arbitrary number, can be any int
// Now do what you need to do after the dialog dismisses.
}
}
}
requestCode
Temelde denilen DialogFragment için int etikettir, ben bunun nasıl gerçekleştirileceği bir saniyede bu eserler. SonuçKodu, DialogFragment öğesinden geri gönderdiğiniz kod olup, bekleyen bekleme Aktivitenizi, Fragmanınızı veya FragmentActivity'yi neler olduğunu söyler.
Bir sonraki kod parçası DialogFragment'a yapılan çağrıdır. Bir örnek burada:
DialogFragment dialogFrag = new MyDialogFragment();
// This is the requestCode that you are sending.
dialogFrag.setTargetFragment(this, 1);
// This is the tag, "dialog" being sent.
dialogFrag.show(getFragmentManager(), "dialog");
Bu üç satırla DialogFragment'ınızı bildiriyorsunuz, Dialog reddedildikten sonra onActivityResult (...) olarak adlandırılacak bir istekKodu ayarlayıp iletişim kutusunu gösteriyorsunuz. Bu kadar basit.
Şimdi, DialogFragment'ınızda dismiss()
, onActivityResult () öğesine bir sonuçKodu geri göndermek için doğrudan bir satır eklemeniz yeterlidir.
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
Bu kadar. Not, sonuçKodu, bu durumda int resultCode
ayarladığım gibi tanımlanır resultCode = 1;
.
İşte bu, şimdi DialogFragment'ınızın sonucunu çağıran Aktivite, Fragman veya FragmentActivity'ye geri gönderebilirsiniz.
Ayrıca, bu bilgiler daha önce yayınlanmış gibi görünüyor, ancak verilen yeterli bir örnek yoktu, bu yüzden daha fazla ayrıntı vereceğimi düşündüm.
EDIT 06.24.2016
Yukarıdaki yanıltıcı kod için özür dilerim. Ama kesinlikle sonucu satır olarak gören aktiviteye geri alamazsınız:
dialogFrag.setTargetFragment(this, 1);
bir hedef belirler Fragment
ve belirlemez Activity
. Yani bunu yapmak için bir uygulamak gerekir InterfaceCommunicator
.
Setinizde DialogFragment
global bir değişken
public InterfaceCommunicator interfaceCommunicator;
İşleyecek genel bir işlev oluşturun
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
Eğer kod geri göndermeye hazır olduğunuzda Sonra Activity
zaman DialogFragment
çalışan yapılır, sadece sizden önce satırı ekleyin dismiss();
SİZİN DialogFragment
:
interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
Etkinliğinizde şimdi iki şey yapmanız gerekiyor, ilki artık geçerli olmayan bir kod satırını kaldırmaktır:
dialogFrag.setTargetFragment(this, 1);
Sonra arayüzü uygulayın ve hepsi bitti. Bunu, implements
sınıfınızın en üst kısmındaki maddeye aşağıdaki satırı ekleyerek yapabilirsiniz :
public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
Ve sonra @Override
aktivitedeki fonksiyon,
@Override
public void sendRequestCode(int code) {
// your code here
}
Bu arayüz yöntemini tıpkı yöntem gibi kullanırsınız onActivityResult()
. Arayüz yöntemi hariç DialogFragments
ve diğeri içindir Fragments
.