Ada cara yang lebih sederhana untuk menerima hasil dari DialogFragment.
Pertama, di Activity, Fragment, atau FragmentActivity Anda perlu menambahkan informasi berikut:
@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.
}
}
}
Pada requestCode
dasarnya ini adalah label int Anda untuk DialogFragment yang Anda panggil, saya akan menunjukkan cara kerjanya dalam sedetik. ResultCode adalah kode yang Anda kirim kembali dari DialogFragment yang memberi tahu Aktivitas, Fragmen, atau FragmentActivity Anda saat ini tentang apa yang terjadi.
Sepotong kode berikutnya untuk masuk adalah panggilan ke DialogFragment. Contohnya ada di sini:
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");
Dengan tiga baris ini Anda mendeklarasikan DialogFragment Anda, menetapkan requestCode (yang akan memanggil onActivityResult (...) setelah Dialog diberhentikan, dan Anda kemudian menampilkan dialog. Sesederhana itu.
Sekarang, di DialogFragment Anda, Anda hanya perlu menambahkan satu baris langsung sebelum dismiss()
sehingga Anda mengirim resultCode kembali ke onActivityResult ().
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
Itu dia. Catatan, resultCode didefinisikan seperti int resultCode
yang saya atur resultCode = 1;
dalam hal ini.
Itu saja, Anda sekarang dapat mengirim hasil DialogFragment Anda kembali ke Aktivitas panggilan Anda, Fragmen, atau FragmentActivity.
Juga, sepertinya informasi ini telah diposting sebelumnya, tetapi tidak ada contoh yang cukup diberikan jadi saya pikir saya akan memberikan lebih banyak detail.
EDIT 06.24.2016
Saya minta maaf atas kode yang menyesatkan di atas. Tetapi Anda pasti tidak dapat menerima hasilnya kembali ke aktivitas dengan melihat sebagai baris:
dialogFrag.setTargetFragment(this, 1);
menetapkan target Fragment
dan tidak Activity
. Jadi untuk melakukan ini, Anda perlu menggunakan implement InterfaceCommunicator
.
Di DialogFragment
set Anda, variabel global
public InterfaceCommunicator interfaceCommunicator;
Buat fungsi publik untuk menanganinya
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
Kemudian ketika Anda siap untuk mengirim kode kembali ke Activity
ketika DialogFragment
dilakukan berjalan, Anda cukup menambahkan baris sebelum Anda dismiss();
Anda DialogFragment
:
interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
Dalam aktivitas Anda sekarang Anda harus melakukan dua hal, yang pertama adalah menghapus satu baris kode yang tidak lagi berlaku:
dialogFrag.setTargetFragment(this, 1);
Kemudian implementasikan antarmuka dan Anda semua selesai. Anda dapat melakukannya dengan menambahkan baris berikut ke implements
klausa di bagian paling atas kelas Anda:
public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
Dan kemudian @Override
fungsi dalam aktivitas tersebut,
@Override
public void sendRequestCode(int code) {
// your code here
}
Anda menggunakan metode antarmuka ini sama seperti onActivityResult()
metode Anda. Kecuali metode antarmuka untuk DialogFragments
dan yang lainnya adalah untuk Fragments
.