Tutorial Komunikasi Antar Fragment
Tutorial Komunikasi Antar Fragment .Pada tutorial ini kita akan membahas tentang komunikasi antar 2 fragment.Berikut beberapa hal yang perlu kamu ketahui untuk membuat fragment saling berkomunikasi:
1. Jangan langsung referensi dari fragment ke fragment lainnya.
2. Buatlah Interface yang berisikan method yang akan bertindak sebagai pembawa suatu event.
3. Implements interface pada activity
4. Fragment 1 menggunakan interface untuk mengirim pesan.
5. Pada activity, method interface yang telah diimplementasikan dapat direferensikan ke fragment 2 dan melakukan perubahan pada sesuai method yang diberikan.
Sebelum melanjutkan tutorial ini,disarankan Anda membaca ebook dan tutorial berikut:
Java
-Polimorfisme
-Interface
Polimorfisme dan inteface bisa dilihat di ebook Pengenalan Pemrograman Java 1 pada bab 11.
Android
–Mengenal Fragment Pada Aplikasi Android
–Tutorial Membuat Fragment dalam Activity
Tutorial Komunikasi Antar Fragment dengan Android Studio
1. Buat dua class java baru dengan nama FragmentA dan FragmentB kemudian extend fragment.
package com.teknorial.inter_fragment_communication;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
/**
* Created by Teknorial on 11/01/2016.
*
* Fragment A
*/
public class FragmentA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle SavedInstanceState){
return inflater.inflate(R.layout.fragment_a,container,false);
}
}
package com.teknorial.inter_fragment_communication;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* Created by Teknorial on 11/01/2016.
*
* Fragment B
*/
public class FragmentB extends Fragment {
TextView text;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle SavedInstanceState){
return inflater.inflate(R.layout.fragment_b,container,false);
}
}
2. Kemudian kita akan membuat file layout untuk fragment dengan nama fragment_a.xml dan fragment_b.xml. Buka direktori res/layout, klik kanan -> new -> Layout resource file -> masukan nama layout fragment dan ubah Root element dengan RelativeLayout, jika sudah selesai klik OK.
<?xml version="1.0" encoding="utf-8"?>
<!-- fragment_a -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#52B3D9"
android:weightSum="1">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sentuh aku kak"
android:id="@+id/button"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<!-- fragment_b -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#446CB3">
<TextView
android:layout_margin="40dp"
android:layout_width="wrap_content"
android:layout_height="88dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Hello Fragment B"
android:id="@+id/textView"
/>
</RelativeLayout>
3. Buat interface dengan nama communicator, ini berguna untuk menghubungkan kedua fragment yang telah kita buat. Untuk membuat interface sama saja dengan membuat java class, yang membedakan pada kind pilih interface.
package com.teknorial.inter_fragment_communication;
/**
* Created by Teknorial on 19/01/2016.
*/
public interface Communicator {
public void respond(String data);
}
4. Buka content_main.xml, kemudian masukan layout fragment. Bagi yang menggunakan android studio versi lama, gunakan activty_main.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- content_main.xml-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.teknorial.inter_fragment_communication.MainActivity">
<fragment
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="com.teknorial.inter_fragment_communication.fragmentA"
android:id="@+id/fragment1"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<fragment
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="com.teknorial.inter_fragment_communication.fragmentB"
android:id="@+id/fragment2"
android:layout_below="@+id/fragment1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
5. Buka kembali FragmentA.java, modifikasi seperti berikut.
package com.teknorial.inter_fragment_communication;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
/**
* Created by Teknorial on 11/01/2016.
*
* Fragment A
*/
public class FragmentA extends Fragment implements View.OnClickListener {
Button button;
int counter =0; //deklarasi counter dengan nilai awal 0
Communicator comm; //interface referensi ke variabel.
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle SavedInstanceState){
return inflater.inflate(R.layout.fragment_a,container,false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
comm = (Communicator) getActivity(); // variabel interface dihubungkan dengan MainActivity
/** Penjelasan singkat mengenai sintak casting object
(Communicator) getActivity;
(classname)object
classname, adalah nama dari class tujuan.
object,adalah sesuatu yang mengarah pada object sumber.
*/
button = (Button) getActivity().findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View view){ /* untuk menghendle method onclick kita perlu implements View.OnClickListener */
counter ++; // setiap diclick akan bertambah nilai dari variabel counter.
comm.respond("Tombol telah di sentuh "+counter+" kali"); //dikirim ke MainActivity melalui method pada interface yang implementasikan.
}
}
6. Buka MainActivity.java, implements interface yang sudah dibuat dan implementasikan method dari Communicator.
package com.teknorial.inter_fragment_communication;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
public class MainActivity extends AppCompatActivity implements Communicator {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
public void respond (String data){
FragmentManager manager = getFragmentManager();
FragmentB f2= (FragmentB) manager.findFragmentById(R.id.fragment2);//untuk mendapatkan referensi FragmentB
f2.changeText(data);//dikirim ke method changeText(data) pada FragmentB
}
}
7. Buka kembali class FragmentB,tambahkan method changeText.
package com.teknorial.inter_fragment_communication;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* Created by Teknorial on 11/01/2016.
*
* Fragment B
*/
public class FragmentB extends Fragment {
TextView text;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle SavedInstanceState){
return inflater.inflate(R.layout.fragment_b,container,false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
text=(TextView) getActivity().findViewById(R.id.textView);
}
public void changeText(String data){
text.setText(data);//menampilkan text yang dikirim dari MainActivity
}
}
Jika aplikasi kita berhasil akan terlihat seperti screenshot dibawah.
Setiap disentuh pada tombol,maka nilai dari counter meningkat.
Demikian artikel Tutorial Komunikasi Antar Fragment. Ikuti terus teknorial.com untuk mengetahui banyak hal tentang pemrograman android. Jangan lupa untuk Like Fanspage Teknorial di Facebook dan Google Plus untuk mendapatkan update terbaru dari teknorial.com . Jika ada pertanyaan jangan ragu untuk bertanya dikotak komentar. Terima Kasih
Source Code: Inter-fragment-communication
Referensi
Communicating with Other Fragments
http://developer.android.com/training/basics/fragments/communicating.html
Pengenalan Pemrograman 1