Android Activity To Fragment Communication

Android Activity’den Fragmenta İletişim

Android’de, bir activity ve bir fragment arasındaki iletişim, genellikle aşağıdaki yollardan biriyle gerçekleştirilir:

  • setArguments() metodu: Bir activity, bir fragmenti başlatırken, setArguments() metoduyla fragmente veri gönderebilir. Bu veri, fragment’ın onCreate() metodunda alınabilir.
  • onActivityResult() metodu: Bir fragment, bir activity’den veri almak için onActivityResult() metodunu kullanabilir. Bu metod, activity’nin finish() metodu çağrıldığında çağrılır.
  • EventBus: EventBus, Android’de olay tabanlı iletişim için kullanılan bir kütüphanedir. Bir activity, bir olayı yayınlayabilir ve bir fragment, bu olayı dinleyebilir.
  • BroadcastReceiver: BroadcastReceiver, Android’de yayınlanan yayın mesajlarını dinlemek için kullanılan bir sınıftır. Bir activity, bir yayın mesajı yayınlayabilir ve bir fragment, bu yayın mesajını dinleyebilir.

setArguments() Metoduyla İletişim

setArguments() metodu, bir activity’nin bir fragmenti başlatırken fragmente veri göndermek için kullandığı metottur. Bu veri, fragment’ın onCreate() metodunda alınabilir.

Aşağıdaki örnekte, MainActivity adlı bir activity, Fragment1 adlı bir fragmenti başlatırken, fragmente “Merhaba Dünya!” mesajını göndermektedir:

“`java
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Fragment1 fragment = new Fragment1();
    Bundle args = new Bundle();
    args.putString("mesaj", "Merhaba Dünya!");
    fragment.setArguments(args);

    getSupportFragmentManager().beginTransaction()
            .add(R.id.container, fragment)
            .commit();
}

}
“`

Fragment1 adlı fragment’ın onCreate() metodu ise aşağıdaki gibidir:

“`java
public class Fragment1 extends Fragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle args = getArguments();
    String mesaj = args.getString("mesaj");

    // Mesajı kullan...
}

}
“`

onActivityResult() Metoduyla İletişim

onActivityResult() metodu, bir fragment’ın bir activity’den veri almak için kullandığı metottur. Bu metod, activity’nin finish() metodu çağrıldığında çağrılır.

Aşağıdaki örnekte, Fragment1 adlı bir fragment, MainActivity adlı activity’den veri almak için onActivityResult() metodunu kullanmaktadır:

“`java
public class Fragment1 extends Fragment {

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            String veri = data.getStringExtra("veri");

            // Veriyi kullan...
        }
    }
}

}
“`

MainActivity adlı activity’nin finish() metodu ise aşağıdaki gibidir:

“`java
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Fragment1 fragment = new Fragment1();
    getSupportFragmentManager().beginTransaction()
            .add(R.id.container, fragment)
            .commit();

    Intent intent = new Intent(this, Activity2.class);
    startActivityForResult(intent, 1);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            String veri = data.getStringExtra("veri");

            // Veriyi kullan...
        }
    }
}

}
“`

EventBus ile İletişim

EventBus, Android’de olay tabanlı iletişim için kullanılan bir kütüphanedir. Bir activity, bir olayı yayınlayabilir ve bir fragment, bu olayı dinleyebilir.

Aşağıdaki örnekte, MainActivity adlı bir activity, “mesaj” olayını yayınlamaktadır:

“`java
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    EventBus.getDefault().post(new MesajOlayi("Merhaba Dünya!"));
}

}
“`

Fragment1 adlı fragment ise “mesaj” olayını dinlemektedir:

“`java
public class Fragment1 extends Fragment {

@Override
public void onStart() {
    super.onStart();

    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    super.onStop();

    EventBus.getDefault().unregister(this);
}

@Subscribe
public void onMesajOlayi(MesajOlayi olay) {
    String mesaj = olay.getMesaj();

    // Mesajı kullan...
}

}
“`

BroadcastReceiver ile İletişim

BroadcastReceiver, Android’de yayınlanan yayın mesajlarını dinlemek için kullanılan bir sınıftır. Bir activity, bir yayın mesajı yayınlayabilir ve bir fragment, bu yayın mesajını dinleyebilir.

Aşağıdaki örnekte, MainActivity adlı bir activity, “mesaj” yayın mesajını yayınlamaktadır:

“`java
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = new Intent("mesaj");
    intent.putExtra("veri", "Merhaba Dünya!");
    sendBroadcast(intent);
}

}
“`

Fragment1 adlı fragment ise “mesaj” yayın mesajını dinlemektedir:

“`java
public class Fragment1 extends Fragment {

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String veri = intent.getStringExtra("veri");

        // Veriyi kullan...
    }
};

@Override
public void onStart() {
    super.onStart();

    IntentFilter intentFilter = new IntentFilter("mesaj");
    getActivity().registerReceiver(broadcastReceiver, intentFilter);
}

@Override
public void onStop() {
    super.onStop();

    getActivity().unregisterReceiver(broadcastReceiver);
}

}
“`

Faydalı Siteler ve Dosyalar


Yayımlandı