Activity'den Fragment'a bir değişken nasıl aktarılır ve geri aktarılır?

Şu anda bir android uygulaması yapıyorum ve activity ile fragment arasında bir tarih geçirmek istiyorum. Aktivitemde fragmenti açan bir buton var: DatePickerFragment.

Aktivitemde, fragment ile değiştirmek istediğim bir tarih gösteriyorum. Bu yüzden tarihi datepicker'a aktarmak ve aktiviteye geri göndermek istiyorum.

Birçok çözüm denedim ama hiçbiri işe yaramıyor. Kolay yol bir argüman iletmektir, ancak bu fragmentlerle yapılamaz.

Bir parçaya bilgi aktarmak için, parçayı oluştururken argümanları ayarlarsınız ve bu argümanı daha sonra parçanızın onCreate veya onCreateView yönteminde geri alabilirsiniz.

Parçanızın newInstance işlevinde, ona göndermek istediğiniz argümanları eklersiniz:

/**
 * Create a new instance of DetailsFragment, initialized to
 * show the text at 'index'.
 */
public static DetailsFragment newInstance(int index) {
    DetailsFragment f = new DetailsFragment();
    // Supply index input as an argument.
    Bundle args = new Bundle();
    args.putInt("index", index);
    f.setArguments(args);
    return f;
}

Daha sonra onCreate veya onCreateView yöntemindeki parçanın içinde argümanları şu şekilde alabilirsiniz:

Bundle args = getArguments();
int index = args.getInt("index", 0);

Eğer şimdi fragmanınızdan aktivitenizle iletişim kurmak istiyorsanız (veri göndermek ya da göndermemek), arayüzleri kullanmanız gerekir. Bunu yapmanın yolu, fragmanlar arası iletişim dokümantasyon eğitiminde çok iyi açıklanmıştır. Tüm fragmanlar birbirleriyle aktivite aracılığıyla iletişim kurduğundan, bu eğitimde, bu verileri aktivitede kullanmak veya aktivitenizin içerdiği başka bir fragmana göndermek için gerçek fragmandan aktivite konteynerine nasıl veri gönderebileceğinizi görebilirsiniz.

Dokümantasyon eğitimi:

http://developer.android.com/training/basics/fragments/communicating.html

Yorumlar (7)

Activityden birFragment`a veri gönderme

Faaliyet:

Bundle bundle = new Bundle();
String myMessage = "Stackoverflow is cool!";
bundle.putString("message", myMessage );
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);
transaction.replace(R.id.fragment_single, fragInfo);
transaction.commit();

Parça:

Parça içindeki değeri okuma

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    String myValue = this.getArguments().getString("message");
    ...
    ...
    ...
}

Ancak Fragment'ten Activity'ye değer göndermek istiyorsanız, jpardogo'nun cevabını okuyun, arayüzlere ihtiyacınız olmalı, daha fazla bilgi: Diğer Fragmanlarla İletişim

Yorumlar (3)

Değişkeninizi içerebilecek olayları ileri geri aktarmak için EventBus kütüphanesini kullanın. Bu iyi bir çözümdür çünkü etkinliklerinizi ve parçalarınızı gevşek bir şekilde bağlı tutar

https://github.com/greenrobot/EventBus

Yorumlar (1)