Halo, semua! Apakabar hari ini? Sudah siap belajar? Jika sebelumnya dicoding tips membahas tentang kirim mengirim data antara activity dan fragment, sekarang kita membahas kirim mengirim data antar Fragment. Nah sebelum itu, aplikasi yang akan di contohkan di sini merupakan upgrade atau modifikasi dari contoh sebelumnya (Tips Kirim Mengirim Data Antara Activity dan Fragment), jadi bagi kamu yang baru bergabung, silahkan di lihat dulu ya J
Gimana, sudah siap projeknya? Oke kita mulai ya. Karena disini kita akan mengsimulasikan perpindahan data antar Fragment dan di contoh sebelumnya baru ada satu Fragment, jadi buat dulu ya Fragment keduanya. Disini nama Fragment keduanya “SecondFragtry” seperti biasa create blank fragment. Sebentar kalian ngerasa aneh ga dengan penamaan class-nya kenapa “Fragtry”? Sebenernya itu singkatan dari “Fragment Try” ya cuman iseng-iseng writer aja sih hehe… Semoga tidak mengurangi semangat dalam belajar di sini.
Fragment kedua sudah di buat, mari kita modifikasi tampilan Fragment pertama “Fragtry” sebagai berikut :
💻 Mulai Belajar Pemrograman
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.
Daftar Sekarang
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.dicoding.dhahedd.latihanfragment.Fragtry"> <View android:layout_width="match_parent" android:layout_height="10dp" android:background="@android:color/darker_gray" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/colorPrimaryDark" android:textSize="20sp" android:paddingBottom="10dp" android:paddingTop="10dp" android:text="THIS IS FRAGMENT !" /> <TextView android:text="Message From Activity :" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView1" /> <TextView android:text="-" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18dp" android:id="@+id/txtMessageActivity" android:textColor="@color/colorAccent" android:textAlignment="center" /> <Space android:layout_width="match_parent" android:layout_height="10dp" /> <TextView android:text="Message From Fragment 2 :" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView3" /> <TextView android:text="-" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18dp" android:id="@+id/txtMessageFragment" android:textColor="@color/colorAccent" android:textAlignment="center" /> <Space android:layout_width="match_parent" android:layout_height="10dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:text="Send message : " /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:ems="10" android:id="@+id/edt_messageFragment" /> <Button android:text="SEND TO ACTIVITY" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btnSendFragment" /> <Button android:text="SEND TO FRAGMENT" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btnSendToFragment" /> </LinearLayout> |
Selanjutnya giliran tampilan Fragment kedua yang kita sesuaikan :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.dicoding.dhahedd.latihanfragment.SecondFragtry"> <View android:layout_width="match_parent" android:layout_height="10dp" android:background="@android:color/darker_gray" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/colorPrimaryDark" android:textSize="20sp" android:paddingBottom="10dp" android:paddingTop="10dp" android:text="THIS IS FRAGMENT 2 !" /> <TextView android:text="Message From Fragment 1 :" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView1" /> <TextView android:text="-" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18dp" android:id="@+id/txtMessageFragment2" android:textColor="@color/colorAccent" android:textAlignment="center" /> <Space android:layout_width="match_parent" android:layout_height="10dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:text="Send message to Fragment 1 : " /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:ems="10" android:id="@+id/edt_messageFragment2" /> <Button android:text="SEND TO FRAGMENT 2" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btnSendFragment2" /> </LinearLayout> |
Sejauh ini masih aman? Yuk kita beralih untuk konfigurasi kelas Fragmentnya. Dimulai dari Kelas Fragment yang sudah ada sebelumnya “Fragment pertama (Fragtry)”. Sesuaikan code-nya sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
public class Fragtry extends Fragment { public static String KEY_ACTIVITY = "msg_activity"; public static String KEY_FRG = "msg_fragment"; public static String KEY_FRG2 = "msg_fragment2"; TextView txtMessageF, txtMessageF2; EditText edtMessageF; Button btn_Send, btn_SendtoFragmnet; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_fragtry, container, false); txtMessageF = (TextView) view.findViewById(R.id.txtMessageActivity); txtMessageF2 = (TextView) view.findViewById(R.id.txtMessageFragment); btn_Send = (Button) view.findViewById(R.id.btnSendFragment); edtMessageF = (EditText) view.findViewById(R.id.edt_messageFragment); btn_SendtoFragmnet = (Button) view.findViewById(R.id.btnSendToFragment); try { String message = getArguments().getString(KEY_ACTIVITY); if (message != null) { txtMessageF.setText(message); } else { txtMessageF.setText("-"); } String message2 = getArguments().getString(KEY_FRG2); if (message2 != null) { txtMessageF2.setText(message2); } else { txtMessageF2.setText("-"); } } catch (Exception ex) { ex.printStackTrace(); } btn_Send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { String msg = edtMessageF.getText().toString(); MainActivity mainActivity = (MainActivity) getActivity(); if (msg != null) { mainActivity.txtMessage.setText(msg); } else { mainActivity.txtMessage.setText("-"); } } catch (Exception ex) { ex.printStackTrace(); } } }); btn_SendtoFragmnet.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String msg = edtMessageF.getText().toString(); SecondFragtry secondFragtry = new SecondFragtry(); Bundle mBundle = new Bundle(); mBundle.putString(KEY_FRG, msg); secondFragtry.setArguments(mBundle); FragmentManager mFragmentManager = getFragmentManager(); FragmentTransaction mFragmentTransaction = mFragmentManager .beginTransaction() .replace(R.id.frame_layout, secondFragtry, SecondFragtry.class.getSimpleName()); mFragmentTransaction.addToBackStack(null).commit(); } }); return view; } } |
Di situ saat fragment di buat, kita tambahakan code untuk menangkap pesan dari activity dan juga dari fragment kedua jika ada. Setelah itu tambahkan pula aksi pada button yang berfungsi untuk mengirim data (pesan) ke Fragment kedua, disini nama button-nya “btn_SendtoFragment”. Konsepnya hampir mirip dengan transaksi data antar Activity, ataupun antara Activity ke Fragment seperti yang telah di bahas sebelumnya. Jadi tinggal di sesuaikan saja.
Kita lanjut modifikasi kelas Fragment kedua (“SecondFragtry”), modifikasi code kelasnya sebagai berikut :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
public class SecondFragtry extends Fragment { public static String KEY_FRG = "msg_fragment"; public static String KEY_FRG2 = "msg_fragment2"; Button btnSendF2; EditText edtMessageF2; TextView txtMessageF2; public SecondFragtry() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_second_fragtry, container, false); btnSendF2 = (Button) view.findViewById(R.id.btnSendFragment2); edtMessageF2 = (EditText) view.findViewById(R.id.edt_messageFragment2); txtMessageF2 = (TextView) view.findViewById(R.id.txtMessageFragment2); String msg = getArguments().getString(KEY_FRG); // Get the message from Fragment 1 if (msg != null && msg != ""){ txtMessageF2.setText(msg); } else { txtMessageF2.setText("-"); } btnSendF2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String msg = edtMessageF2.getText().toString(); // Send a message to Fragment 1 Fragtry fragtry = new Fragtry(); Bundle mBundle = new Bundle(); mBundle.putString(KEY_FRG2, msg); fragtry.setArguments(mBundle); FragmentManager mFragmentManager = getFragmentManager(); FragmentTransaction mFragmentTransaction = mFragmentManager .beginTransaction() .replace(R.id.frame_layout, fragtry, Fragtry.class.getSimpleName()); mFragmentTransaction.addToBackStack(null).commit(); } }); return view; } } |
Perhatikan baik-baik ya, disitu kelas Fragment kedua mengecek apakah ada pesan yang masuk atau tidak ketika Fragment 2 di panggil. Setelah itu, terdapat pula aksi untuk mengirim kembali pesan ke Fragment 1. Sejauh ini konsepnya sama, dan jika dijalankan di device, hasilnya seperti ini :
Nah, gimana mudah kan? Ini hanya contoh kecil untuk mensimulasikan perpindahan data antar Fragment, sisanya bisa kita explore sendiri, atau kalau mau lebih mudah belajarnya langsung aja yuk cek akademinya Dicoding di link berikut ini Dicoding Academy Belajar Membangun Aplikasi Android Native (www.dicoding.com/academies/26).
Mungkin cukup sekian dicoding tips kali ini, sampe jumpa di tips kami selanjutnya. Oh ya, satu hal lagi jika ada kritik atupun saran, jangan sungkan untuk menyampaikannya ya.
Selamat belajar !