Bu dersimizde fragment’ten activity’e veri gönderme işlemini anlatmaya çalıştım.
Bir önceki derste activity’den fragmente veri gönderme işlemini anlatmıştım. Bu derste bunun tersi durumunu gerçekleştireceğiz. Verilerimiz fragmentte olacak ve butona tıklanıldığında girilen iki tane sayı değeri ilgili activity’e gönderilip hesaplanacak.
Bunun için bir tane interface gerçekleştirmemiz gerekiyor. Interface’de tanımlı olan method/methodlar onu implemente eden sınıflar tarafınca gerçekleştirilmek zorundadır. Yani interface’i bir köprü gibi kullanıcaz ve fragmentten activity’e veri göndermeyi sağlayacağız. Peki bu nasıl olacak?
Siz eğer bir sınıfa implement interface_Adi derseniz o sınıf o interface’in bir alt sınıfı olur. Bu sayede fragmentin içinde ilgili interface’den bir nesne oluşturursanız ve activity’iniz o interface’yi implemente etmişse fragment içinden activity’e ulaşmış olursunuz. Böylece istediğiniz verileri interface’nin methoduna parametre olarak geçip verilerinizi gönderebilirsiniz. Sırasıyla şu işlemleri yaparak bu durumu sağlayabilirsiniz:
1- Bir interface tanımlayın ve bunun içine göndermek istediğiniz verileri parametre olarak alan bir method oluşturun. Bizim örneğimizde MyListener diye bir interface ve sayilariTopla adında bir method mevcut.
2- Bu interface’yi verileri göndermek istediğiniz activity implemente etsin. Bu durumda activity’de sayilariTopla methodunun oluşturulması zorunlu hale gelecek.
3- Veri kaynağı olan fragment sınıfında oluşturduğunuz interface’den bir nesne üretin. Bu nesne sayesinde biz ilgili methoda ulaşabilir ve istediğimiz verileri bu methoda parametre olarak geçebiliriz ki bu sayede activity’mize fragmentten veri akışı sağlayabiliriz.
Bu örnek için yazılan kodlar aşağıdadır…
Umarım faydalı bir ders olmuştur…
1 2 3 4 |
public interface MyListener { void sayilariTopla(int sayi1, int sayi2); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class MainActivity extends AppCompatActivity implements MyListener { TextView sonuc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sonuc= (TextView) findViewById(R.id.tvSonuc); } @Override public void sayilariTopla(int sayi1, int sayi2) { int toplam=sayi1+sayi2; sonuc.setText("SONUC = "+ toplam); } } |
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 |
public class FragmentA extends Fragment { EditText sayi1; EditText sayi2; Button sayilariGOnder; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v= inflater.inflate(R.layout.fragment_a, container, false); sayi1= (EditText) v.findViewById(R.id.etSayi1); sayi2= (EditText) v.findViewById(R.id.etSayi2); sayilariGOnder= (Button) v.findViewById(R.id.btnActivityeSayilariGonder); sayilariGOnder.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendData(); } }); return v; } public void sendData(){ int s1=Integer.parseInt(sayi1.getText().toString()) ; int s2=Integer.valueOf(sayi2.getText().toString()); MyListener listener= (MyListener) getActivity(); listener.sayilariTopla(s1, s2); } } |
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 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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: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.example.emrealtunbilek.fragmenttoactivitydata.MainActivity"> <TextView android:text="SONUC" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:id="@+id/tvSonuc" android:textAppearance="@style/TextAppearance.AppCompat.Medium" /> <fragment android:layout_width="wrap_content" android:layout_height="wrap_content" android:name="com.example.emrealtunbilek.fragmenttoactivitydata.FragmentA" android:id="@+id/fragment" tools:layout="@layout/fragment_a" android:layout_below="@+id/tvSonuc" android:layout_marginTop="117dp" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_alignParentStart="true" /> </RelativeLayout> |
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 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#0ec" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="0" android:inputType="number" android:id="@+id/etSayi1" /> <EditText android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="0" android:inputType="number" android:id="@+id/etSayi2" /> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Activity'e Gönder" android:id="@+id/btnActivityeSayilariGonder" /> </LinearLayout> |