Spróbuj użyć interfejsów.
Każdy fragment, który powinien przekazywać dane z powrotem do swojego działania zawierającego, powinien deklarować interfejs do obsługi i przekazywania danych. Następnie upewnij się, że działanie zawierające implementuje te interfejsy. Na przykład:
JAWA
W swoim fragmencie zadeklaruj interfejs ...
public interface OnDataPass {
public void onDataPass(String data);
}
Następnie podłącz implementację interfejsu klasy zawierającej do fragmentu w metodzie onAttach, tak jak poniżej:
OnDataPass dataPasser;
@Override
public void onAttach(Context context) {
super.onAttach(context);
dataPasser = (OnDataPass) context;
}
W swoim fragmencie, gdy musisz obsłużyć przekazywanie danych, po prostu wywołaj go w obiekcie dataPasser:
public void passData(String data) {
dataPasser.onDataPass(data);
}
Wreszcie, w Twojej działalności zawierającej, która implementuje OnDataPass
...
@Override
public void onDataPass(String data) {
Log.d("LOG","hello " + data);
}
KOTLIN
Krok 1. Utwórz interfejs
interface OnDataPass {
fun onDataPass(data: String)
}
Krok 2. Następnie podłącz implementację interfejsu zawierającej klasę do fragmentu w metodzie onAttach (YourFragment), tak jak poniżej:
lateinit var dataPasser: OnDataPass
override fun onAttach(context: Context) {
super.onAttach(context)
dataPasser = context as OnDataPass
}
Krok 3. W obrębie twojego fragmentu, kiedy musisz obsłużyć przekazywanie danych, po prostu wywołaj go w obiekcie dataPasser:
fun passData(data: String){
dataPasser.onDataPass(data)
}
Krok 4. Wreszcie, w swojej aktywności implementuje OnDataPass
class MyActivity : AppCompatActivity(), OnDataPass {}
override fun onDataPass(data: String) {
Log.d("LOG","hello " + data)
}