Jumpa lagi kita di dicoding tips. Kali ini kita akan memberikan tips tentang mengirim data dari activity ke fragment dan begitupun sebaliknya. Kalau ibarat berkendara sih, Pulang Pergi hehe..
Oke, seperti biasa pastikan Android Studio kalian dalam keadaan prima dan kalian sudah meng-create projek yang akan kita eksekusi. Di sini kebetulan nama projeknya “Latihan Fragment”. Oh iya karena disini kita membahas tentang kirim mengirim data antara Fragment dan Activity, pastikan juga kita sudah membuat Fragmentnya. Sudah siap semua? Langsung kita create tampilan-tampilannya dulu.
Tampilan Activity:
💻 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 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.dicoding.dhahedd.latihanfragment.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="10dp" android:text="THIS IS ACTIVITY !" android:textColor="@android:color/holo_blue_dark" android:textSize="20sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Send message to fragment : " android:textSize="14sp" /> <EditText android:id="@+id/edt_messageActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="text" /> <Button android:id="@+id/btnSendActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="SEND" /> <Space android:layout_width="match_parent" android:layout_height="10dp" /> <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Message From Fragment :" /> <TextView android:id="@+id/txtReplyActivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="-" android:textAlignment="center" android:paddingTop="20dp" android:textColor="@color/colorPrimaryDark" android:textSize="18dp" /> <FrameLayout android:id="@+id/frame_layout" android:layout_width="match_parent" android:layout_height="match_parent"> </FrameLayout> </LinearLayout> |
Tampilan pada Fragment :
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 |
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:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:text="Send message to Activity : " /> <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" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/btnSendFragment" /> </LinearLayout> |
Tampilannya sudah ada, sekarang mari kita ngode eh ngoding maksudnya hehe..
Coba cek kelas Activity nya, kita modifikasi code nya seperti di bawah ini :
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 |
public class MainActivity extends AppCompatActivity { EditText editText; TextView txtMessage; Button btnSend; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText) findViewById(R.id.edt_messageActivity); txtMessage = (TextView) findViewById(R.id.txtReplyActivity); btnSend = (Button) findViewById(R.id.btnSendActivity); btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { String message = editText.getText().toString(); Bundle data = new Bundle(); data.putString(Fragtry.KEY_ACTIVITY, message); Fragtry fragtry = new Fragtry(); fragtry.setArguments(data); getSupportFragmentManager() .beginTransaction() .replace(R.id.frame_layout, fragtry) .commit(); } catch (Exception e) { e.printStackTrace(); } } }); } } |
Perhatikan code yang di highlight biru, di situ kita meng-create dan mengirim data ke fragment kita dari Activity.
Kita lanjut ngodingnya ya, sekarang giliran kelas Fragment. Sesuaikan codenya seperti di bawah ini:
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 |
public class Fragtry extends Fragment { public static String KEY_ACTIVITY = "msg_activity"; TextView txtMessageF; EditText edtMessageF; Button btn_Send; @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); btn_Send = (Button) view.findViewById(R.id.btnSendFragment); edtMessageF = (EditText) view.findViewById(R.id.edt_messageFragment); try { String message = getArguments().getString(KEY_ACTIVITY); if (message != null) { txtMessageF.setText(message); } else { txtMessageF.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(); } } }); return view; } } |
Nah kalau disini yang di highlight itu untuk menangkap data yang telah kita kirim sebelumnya dari Activity. Untuk membalas pesan ke Activity kita set di method onClick pada button SEND.
Selesai sudah, coba di run aplikasinya 🙂
Akhirnya bisa juga kan kirim mengirim data antar activity dan fragment. Kalian bisa explore lebih di kelas Dicoding Academy Belajar Membangun Aplikasi Android Native (www.dicoding.com/academies/26), materi nya dibuat oleh Google Developer Expert Indonesia loh, terus kalian juga bisa tanya-tanya perihal Android Studio disana.
Oke, selamat belajar, semoga bermanfaat, dan jangan lupa pastinya nantikan tips kami selanjutnya.