2013-01-08 10 views
12

Chcę wysłać dane String z fragment do activity.onAttach oddzwonienie z fragmentu do działalności

Przeczytałem artykuł o komunikacji między fragmentem a aktywnością w programie dla programistów Androida, korzystając z oddzwaniania onAttach.

Czy ktoś może wyjaśnić w jasny sposób, jak przesłać dane z fragmentu do działania?

Odpowiedz

29

Powinieneś zrobić coś takiego. Najpierw utworzyć interfejs, który będzie używany do komunikacji z aktywności na przykład:

public interface OnViewSelected { 
public void onViewSelected(int viewId); 
} 

iw swoim onAttach to zrobić:

OnViewSelected _mClickListener; 
@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    try { 
     _mClickListener = (OnViewSelected) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() + " must implement onViewSelected"); 
    } 
} 

W swojej Fragment wdrożyć OnClickListener i metodę onClick() to zrobić:

@Override 
public void onClick(View v) { 
    _mClickListener.onViewSelected(456); 
} 

Po tym w swojej Działalności musisz zaimplementować interfejs utworzony w Twoim Fragmentie i będzie on poproś o dodanie niezaimplementowanych metod, a w swojej działalności będziesz miał taką funkcję:

@Override 
public void onViewSelected(int data) { 
    Log.d("","data : "+data); // this value will be 456. 
} 

To wszystko. :)

+2

fajne :) Android Framework generuje się tak, jak mówisz. I teraz mogę to wyraźnie zrozumieć – hqt

+0

dlaczego stworzyć interfejs? Nie możesz po prostu utworzyć kontekstowego pliku ctx (globalnego) i przesłać go do działania przekazanego wewnątrz działania OnAttach by ctx = (YourActivity), a następnie użyć pliku ctx.onViewSelected (dane), podanego w polu Kurs utworzony przez użytkownika onViewSelected w swojej działalności. – tony9099

+0

Ponieważ moim zdaniem jest to najlepszy sposób do tej pory, nie ma znaczenia, czy używam tego w jednym 'Fragmentie' lub wielu. Twoja implementacja też będzie działać, ale lubię interfejsy więcej :) – hardartcore

Powiązane problemy