Prova a usare le interfacce.
Qualsiasi frammento che dovrebbe restituire i dati alla sua attività di contenimento dovrebbe dichiarare un'interfaccia per gestire e trasmettere i dati. Quindi assicurati che le tue attività di contenimento implementino quelle interfacce. Per esempio:
GIAVA
Nel tuo frammento, dichiara l'interfaccia ...
public interface OnDataPass {
public void onDataPass(String data);
}
Quindi, collega l'implementazione della classe contenente dell'interfaccia al frammento nel metodo onAttach, in questo modo:
OnDataPass dataPasser;
@Override
public void onAttach(Context context) {
super.onAttach(context);
dataPasser = (OnDataPass) context;
}
Nel tuo frammento, quando devi gestire il passaggio di dati, chiamalo semplicemente sull'oggetto dataPasser:
public void passData(String data) {
dataPasser.onDataPass(data);
}
Infine, nella tua attività di contenimento che implementa OnDataPass
...
@Override
public void onDataPass(String data) {
Log.d("LOG","hello " + data);
}
Kotlin
Passaggio 1. Creare l'interfaccia
interface OnDataPass {
fun onDataPass(data: String)
}
Passaggio 2. Quindi, collegare l'implementazione della classe di contenimento dell'interfaccia al frammento nel metodo onAttach (YourFragment), in questo modo:
lateinit var dataPasser: OnDataPass
override fun onAttach(context: Context) {
super.onAttach(context)
dataPasser = context as OnDataPass
}
Passaggio 3. Nel frammento, quando è necessario gestire il passaggio di dati, è sufficiente chiamarlo sull'oggetto dataPasser:
fun passData(data: String){
dataPasser.onDataPass(data)
}
Passaggio 4. Infine, nella tua attività implementa OnDataPass
class MyActivity : AppCompatActivity(), OnDataPass {}
override fun onDataPass(data: String) {
Log.d("LOG","hello " + data)
}