Intenta usar interfaces.
Cualquier fragmento que debe pasar datos a su actividad que contiene debe declarar una interfaz para manejar y pasar los datos. Luego, asegúrese de que su actividad de contención implemente esas interfaces. Por ejemplo:
JAVA
En su fragmento, declare la interfaz ...
public interface OnDataPass {
public void onDataPass(String data);
}
Luego, conecte la implementación de la clase que contiene la interfaz al fragmento en el método onAttach, de esta manera:
OnDataPass dataPasser;
@Override
public void onAttach(Context context) {
super.onAttach(context);
dataPasser = (OnDataPass) context;
}
Dentro de su fragmento, cuando necesite manejar el paso de datos, simplemente instálelo en el objeto dataPasser:
public void passData(String data) {
dataPasser.onDataPass(data);
}
Finalmente, en su actividad de contención que implementa OnDataPass
...
@Override
public void onDataPass(String data) {
Log.d("LOG","hello " + data);
}
KOTLIN
Paso 1. Crear interfaz
interface OnDataPass {
fun onDataPass(data: String)
}
Paso 2. Luego, conecta la implementación de la clase que contiene la interfaz al fragmento en el método onAttach (YourFragment), así:
lateinit var dataPasser: OnDataPass
override fun onAttach(context: Context) {
super.onAttach(context)
dataPasser = context as OnDataPass
}
Paso 3. Dentro de su fragmento, cuando necesite manejar el paso de datos, simplemente instálelo en el objeto dataPasser:
fun passData(data: String){
dataPasser.onDataPass(data)
}
Paso 4. Finalmente, en tu actividad implementa OnDataPass
class MyActivity : AppCompatActivity(), OnDataPass {}
override fun onDataPass(data: String) {
Log.d("LOG","hello " + data)
}