Попробуйте использовать интерфейсы.
Любой фрагмент, который должен передавать данные обратно в содержащую его деятельность, должен объявлять интерфейс для обработки и передачи данных. Затем убедитесь, что ваша содержащая деятельность реализует эти интерфейсы. Например:
ЯВА
В вашем фрагменте объявите интерфейс ...
public interface OnDataPass {
public void onDataPass(String data);
}
Затем подключите реализацию интерфейса содержащего класса к фрагменту в методе onAttach, например, так:
OnDataPass dataPasser;
@Override
public void onAttach(Context context) {
super.onAttach(context);
dataPasser = (OnDataPass) context;
}
Внутри вашего фрагмента, когда вам нужно обработать передачу данных, просто вызовите его для объекта dataPasser:
public void passData(String data) {
dataPasser.onDataPass(data);
}
Наконец, в вашей сдерживающей деятельности, которая реализует OnDataPass
...
@Override
public void onDataPass(String data) {
Log.d("LOG","hello " + data);
}
Котлин
Шаг 1. Создать интерфейс
interface OnDataPass {
fun onDataPass(data: String)
}
Шаг 2. Затем подключите реализацию интерфейса содержащего класса к фрагменту в методе onAttach (YourFragment) следующим образом:
lateinit var dataPasser: OnDataPass
override fun onAttach(context: Context) {
super.onAttach(context)
dataPasser = context as OnDataPass
}
Шаг 3. В вашем фрагменте, когда вам нужно обработать передачу данных, просто вызовите его для объекта dataPasser:
fun passData(data: String){
dataPasser.onDataPass(data)
}
Шаг 4. Наконец, в вашей деятельности реализуется OnDataPass
class MyActivity : AppCompatActivity(), OnDataPass {}
override fun onDataPass(data: String) {
Log.d("LOG","hello " + data)
}