Bagaimana cara mentransfer variabel dari fragmen ke aktivitas di Android?

Sebuah kisah tentang bagaimana di Android untuk mentransfer informasi dari sebuah fragmen (Fragmen) ke suatu aktivitas (Aktivitas). Informasi ini akan berguna untuk pemula (junior), yang menguasai pemrograman untuk Android, dan tidak mungkin menarik bagi middle dan manula.

Luncurkan IDE (lingkungan pengembangan terintegrasi) Android Studio . Buat proyek baru: File -> Baru -> Proyek Baru. Pilih "Aktivitas Kosong", klik "Selanjutnya".



Isi kolom “Nama”, “Nama paket”, “Simpan lokasi”.



IDE akan secara otomatis membuat dua file: "MainActivity.java" di direktori "java / [nama paket]", "activity_main.xml" di direktori "res / layout".





File Java menentukan apa yang dikerjakan aplikasi, xml - seperti apa tampilannya . Sejauh ini sangat sedikit, hanya "setContentView (R.layout.activity_main);". Baris ini memberi tahu aplikasi untuk menggunakan tata letak activity_main.xml saat startup. Dan, karena tata letak hanya berisi satu widget dari jenis "TextView" dengan teks "Hello World!", Aplikasi kami juga terlihat sangat sederhana.



Di folder proyek, buat fragmen dengan nama "Fragment1".





IDE akan membuat dua file: "Fragment1" dan "fragment_fragment1.xml".





Buka file tata letak fragmen dan hapus widget "TextView" yang tidak kita butuhkan dengan garis sambutan.



Beralih ke mode desain dan seret tombol (Tombol) ke tata letak.



IDE akan membuat tombol dengan pengenal "button1".



Sekarang edit tata letak aktivitas utama, mis. file "activity_main.xml"



Pindahkan widget teks lebih tinggi dan tambahkan fragmen yang kami buat ke tata letak (untuk melakukan ini, seret elemen "<>" ke tata letak, pilih "Fragment1" dan klik "OK").



Dalam tata letak aktivitas dalam pengaturan fragmen, atur layout_height = “wrap_content” dan edit penempatannya sesuai selera Anda. Kami juga akan mengubah pengidentifikasi bidang teks menjadi "textReport", dan fragmen menjadi "fragmentWithButton".



Jalankan emulator (Shift + F10) dan lihat apa yang terjadi.



Aplikasi ini menampilkan tulisan "Hello World!" dan tombol BUTTON. Prasasti disimpulkan dari aktivitas , tombol milik sebuah fragmen . Tombol ditekan, tetapi sejauh ini tidak berpengaruh. Mari kita coba program prasasti untuk menampilkan jumlah penekanan tombol. Untuk melakukan ini, kita perlu mengirim pesan tentang klik tombol dari fragmen ke aktivitas .

Pertama, kami akan mengajarkan fragmen untuk menghitung jumlah klik tombol. Buka file "Fragment1.java".



Tambahkan variabel "penghitung". Dalam metode "onCreateView", yang dipanggil segera setelah fragmen dibuat, buat tombol "pendengar". IDE akan membutuhkan implementasi View.OnClickListener - setuju (Alt + Enter). Mari kita membuat (mendefinisikan kembali) metode onClick, yang akan meningkatkan nilai variabel "counter" dengan setiap klik tombol dan menampilkan pesan pop-up.



Mari kita periksa emulator (lagi Shift + F10) cara kerjanya. Menekan tombol akan menyebabkan pesan pop-up "Jumlah klik tombol: ..." muncul di bagian bawah layar aplikasi.



Bagus, teruskan. Tujuan utama kami adalah untuk mentransfer informasi (dalam hal ini, jumlah klik tombol) dari instance fragmen ke instance aktivitas. Sayangnya, siklus hidup aktivitas dan fragmen diatur sehingga Android (hampir) tidak memungkinkan aktivitas dan fragmen untuk berkomunikasi secara langsung, sehingga kita membutuhkan antarmuka perantara. Sebut saja dia "Tukang Pos" (tukang pos). Antarmuka dapat dibuat dalam file terpisah atau dalam file dengan kode fragmen; kami akan memilih opsi pertama. Antarmuka tukang pos kami akan berisi metode abstrak tunggal (tanpa "tubuh") dari "fragmentMail".



Kami akan menggunakan variabel "numberOfClicks" sebagai "amplop" untuk mentransfer pesan dari fragmen ke aktivitas.

Buka file dengan kode aktivitas "MainActivity.java". Seperti yang kita ingat, tampilannya seperti ini:



Kami menerapkan antarmuka Postman dan menambahkan metode antarmuka fragmentMail ke aktivitas, mendefinisikannya kembali ( Override ).



Sekarang, segera setelah aktivitas "melihat" nilai baru dalam variabel "numberOfClicks", itu akan menampilkan pesan yang diperbarui di bidang teks teksLaporan.

Tetapi kita masih perlu "memasukkan surat itu ke dalam amplop", yaitu berikan variabel jumlah klik pada tombol. Dan kami melakukan ini dalam kode fragmen. Buka file "Fragment1.java".

D̶o̶b̶a̶v̶l̶ya̶e̶m̶ V ̶p̶o̶d̶p̶i̶s̶̶ klassa ̶i̶m̶p̶l̶e̶m̶e̶n̶t̶a̶ts̶i̶yu̶ ̶i̶n̶t̶e̶r̶f̶e̶y̶s̶a̶ ̶ «Postman». IDE ̶p̶o̶t̶r̶e̶b̶u̶e̶t̶ ̶p̶e̶r̶e̶o̶p̶r̶e̶d̶e̶l̶i̶t̶̶ metod ̶i̶n̶t̶e̶r̶f̶e̶y̶s̶a̶ ̶ «̶f̶r̶a̶g̶m̶e̶n̶t̶M̶a̶i̶l̶» ̶, ̶ ada Delat V Nom saya ̶n̶i̶ch̶e̶g̶o̶ Ne ̶b̶u̶d̶e̶m̶, ̶ ̶p̶o̶e̶t̶o̶m̶u̶ ̶o̶s̶t̶a̶v̶i̶m̶ ego Telo ̶p̶u̶s̶t̶y̶m̶. [Dihapus, lihat “Note 1 of 04/20/2019”]

Kami akan membutuhkan tautan ke instance aktivitas. Kami akan mendapatkannya ketika sebuah fragmen dilampirkan ke aktivitas seperti ini:


Dalam metode "onClick" (yang sama yang dipanggil ketika tombol fragmen kami diklik) kami menambahkan panggilan ke antarmuka dari instance aktivitas.



Kode akhir fragmen setelah menghapus (untuk kekompakan) komentar terlihat seperti ini:


Sekarang fragmen kami menghitung jumlah klik tombol , menampilkannya dalam pesan pop-up, dan kemudian, menggunakan antarmuka Postman, mentransfer nilai variabel penghitung ke variabel numberOfClicks , yang berfungsi sebagai wadah amplop untuk mengirim pesan dari fragmen ke aktivitas. Aktivitas, menerima pesan baru, segera menampilkannya di bidang teks widgetnya dengan pengenal "textReport". Tujuannya tercapai!


PS: Mengubah bahasa pemrograman dari Java ke Kotlin dapat secara signifikan mengurangi fragmen kode:



PPS: Unduh file proyek di sini: Java , Kotlin .

Catatan 1 dari 04/20/2019:


Implementasi antarmuka Postman telah dihapus dari kode fragmen.
Sebuah fragmen bekerja dengan antarmuka melalui aktivitas di mana antarmuka ini sudah diimplementasikan.
Terima kasih kepada mikaakim untuk memberikan komentar .
File yang diperbarui dapat diunduh dari github di tautan di atas.

Source: https://habr.com/ru/post/id448744/


All Articles