Saat ini saya membuat sebuah aplikasi android, dan saya ingin untuk melewatkan tanggal antara aktivitas dan fragmen. Aktivitas saya memiliki sebuah tombol, yang membuka fragmen: DatePickerFragment.
Dalam aktivitas saya saya menunjukkan tanggal, yang saya ingin memodifikasi dengan fragmen. Jadi saya ingin lulus tanggal dengan datepicker, dan mengirimkannya kembali ke aktivitas.
I've mencoba banyak solusi, tapi tidak ada yang bekerja. Cara mudah akan melewati argumen, tapi ini dapat't dilakukan dengan fragmen.
Untuk info lulus ke fragmen , anda setArguments ketika anda membuat itu, dan anda dapat mengambil argumen ini kemudian pada method onCreate atau onCreateView anda fragmen.
Pada newInstance fungsi dari fragmen yang anda tambahkan argumen yang anda ingin mengirim ke:
/**
* Create a new instance of DetailsFragment, initialized to
* show the text at 'index'.
*/
public static DetailsFragment newInstance(int index) {
DetailsFragment f = new DetailsFragment();
// Supply index input as an argument.
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}
Kemudian di dalam fragmen pada metode onCreate
atau onCreateView
anda dapat mengambil argumen seperti ini:
Bundle args = getArguments();
int index = args.getInt("index", 0);
Jika anda ingin sekarang berkomunikasi dari fragmen dengan aktivitas anda (mengirim data), anda perlu untuk menggunakan antarmuka. Cara yang bisa anda lakukan adalah menjelaskan yang benar-benar baik dalam dokumentasi tutorial komunikasi antara fragmen. Karena semua fragmen berkomunikasi antara satu sama lain melalui kegiatan ini, dalam tutorial ini anda dapat melihat bagaimana anda dapat mengirim data dari fragmen aktual untuk aktivitas wadah untuk menggunakan data ini pada aktivitas atau mengirimkannya ke fragmen lain yang aktivitas anda mengandung.
Dokumentasi tutorial:
http://developer.android.com/training/basics/fragments/communicating.html
Aktivitas
ke Fragmen
Aktivitas:
Bundle bundle = new Bundle();
String myMessage = "Stackoverflow is cool!";
bundle.putString("message", myMessage );
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);
transaction.replace(R.id.fragment_single, fragInfo);
transaction.commit();
Fragmen:
Membaca nilai pada fragmen
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
String myValue = this.getArguments().getString("message");
...
...
...
}
Tapi jika anda ingin mengirim nilai dari Fragmen untuk Kegiatan membaca jawaban dari jpardogo, anda harus membutuhkan interface, info lebih lanjut: Berkomunikasi dengan Fragmen lainnya
Menggunakan perpustakaan EventBus untuk lulus acara yang bisa berisi variabel anda kembali dan sebagainya. It's solusi yang baik karena itu membuat aktivitas anda dan fragmen longgar ditambah
terima kasih untuk @ρяσѕρєя K dan Terry ... itu membantu saya banyak dan bekerja sempurna
Dari Aktivitas anda mengirim data dengan maksud sebagai:
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);
dan di Fragmen onCreateView metode:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// get arguments
String strtext = getArguments().getString("edttext");
return inflater.inflate(R.layout.fragment, container, false);
}
referensi : Kirim data dari activity fragment android
Untuk semua Kotlin pengembang di luar sana:
Berikut ini adalah Android Studio usulan solusi untuk mengirim data ke Fragmen (= ketika anda membuat Kosong-Fragmen dengan File -> New> Fragmen -> Fragmen(Kosong) dan anda memeriksa "termasuk fragmen pabrik metode").
Menempatkan ini dalam Fragmen:
class MyFragment: Fragment {
...
companion object {
@JvmStatic
fun newInstance(isMyBoolean: Boolean) = MyFragment().apply {
arguments = Bundle().apply {
putBoolean("REPLACE WITH A STRING CONSTANT", isMyBoolean)
}
}
}
}
.menerapkan
adalah trik yang bagus untuk mengatur data ketika sebuah objek dibuat, atau karena mereka menyatakan here:
Panggilan yang ditentukan fungsi [blok] dengan
ini
nilai sebagai penerima dan kembaliini
nilai.
Kemudian dalam Kegiatan atau Fragmen lakukan:
val fragment = MyFragment.newInstance(false)
... // transaction stuff happening here
dan baca Argumen dalam Fragmen seperti:
private var isMyBoolean = false
override fun onAttach(context: Context?) {
super.onAttach(context)
arguments?.getBoolean("REPLACE WITH A STRING CONSTANT")?.let {
isMyBoolean = it
}
}
Untuk "kirim" data kembali ke Aktivitas anda, hanya mendefinisikan fungsi dalam Aktivitas anda dan lakukan hal berikut dalam Fragmen:
(activity as? YourActivityClass)?.callYourFunctionLikeThis(date) // your function will not be called if your Activity is null or is a different Class
Menikmati keajaiban Kotlin!
Pengiriman data dari Aktivitas menjadi fragmen-Fragmen yang terkait dengan XML
Jika anda membuat sebuah fragmen di Android Studio menggunakan salah satu template misalnya File > New > Fragmen > Fragmen (klik disini), kemudian fragmen terkait melalui XML. Yang newInstance metode ini dibuat dalam fragmen tapi tidak pernah disebut agar bisa't dapat digunakan untuk menyampaikan argumen.
Sebaliknya dalam Kegiatan override metode onAttachFragment
@Override
public void onAttachFragment(Fragment fragment) {
if (fragment instanceof DetailsFragment) {
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
}
}
Kemudian membaca argumen dalam fragmen onCreate sesuai jawaban yang lain