Tente usar interfaces.
Qualquer fragmento que deve transmitir dados de volta à sua atividade de contenção deve declarar uma interface para manipular e transmitir os dados. Em seguida, verifique se a atividade que contém implementa essas interfaces. Por exemplo:
JAVA
No seu fragmento, declare a interface ...
public interface OnDataPass {
public void onDataPass(String data);
}
Em seguida, conecte a implementação da interface da classe que contém ao fragmento no método onAttach, da seguinte maneira:
OnDataPass dataPasser;
@Override
public void onAttach(Context context) {
super.onAttach(context);
dataPasser = (OnDataPass) context;
}
No seu fragmento, quando você precisar manipular a passagem de dados, basta chamá-lo no objeto dataPasser:
public void passData(String data) {
dataPasser.onDataPass(data);
}
Finalmente, em sua atividade de contenção que implementa OnDataPass
...
@Override
public void onDataPass(String data) {
Log.d("LOG","hello " + data);
}
KOTLIN
Etapa 1. Criar interface
interface OnDataPass {
fun onDataPass(data: String)
}
Etapa 2. Em seguida, conecte a implementação da classe que contém a interface ao fragmento no método onAttach (YourFragment), da seguinte maneira:
lateinit var dataPasser: OnDataPass
override fun onAttach(context: Context) {
super.onAttach(context)
dataPasser = context as OnDataPass
}
Etapa 3. No seu fragmento, quando você precisar manipular a passagem de dados, basta chamá-lo no objeto dataPasser:
fun passData(data: String){
dataPasser.onDataPass(data)
}
Etapa 4. Finalmente, em sua atividade implementa OnDataPass
class MyActivity : AppCompatActivity(), OnDataPass {}
override fun onDataPass(data: String) {
Log.d("LOG","hello " + data)
}