вы можете использовать интерфейсы, чтобы разрешить связь между двумя фрагментами и их не рекомендуется использовать
, однако лучше альтернативная опция - использовать компоненты архитектуры
, просто добавьте следующие библиотеки в файл gradle вашего приложения
implementation 'android.arch.lifecycle:extensions:1.1.1'
implementation 'android.arch.lifecycle:runtime:1.1.1'
и затем создайте следующий класс, как показано ниже
import android.arch.lifecycle.ViewModel;
import android.support.annotation.NonNull;
public class TestViewModel extends ViewModel {
private MutableLiveData<String> fragmentAClicked;
public LiveData<String> getFragmentAClicked() {
if (fragmentAClicked == null) {
fragmentAClicked = new MutableLiveData<String>();
}
return fragmentAClicked;
}
public void fragmentAIsClicked(){
fragmentAClicked.setValue("I am clicked")
}
}
, добавьте в свой класс активности следующий код
public class MyActivity extends AppCompatActivity {
TestViewModel model;
public void onCreate(Bundle savedInstanceState) {
model = ViewModelProviders.of(this).get(TestViewModel.class);
}
}
Предположим, у вас есть два фрагмента A и B
public class FragmentB extends Fragment {
private TestViewModel model;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
model =ViewModelProviders.of(getActivity()).get(TestViewModel.class);
//communicating with fragment
model.fragmentAIsClicked();
}
}
public class FragmentA extends Fragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TestViewModel model = ViewModelProviders.of(getActivity()).get(TestViewModel.class);
model.getFragmentAClicked().observe(this, { msg ->
Log.d("test","message from fragmentA is " + msg)
});
}
}
, поэтому основная идея заключается в том, что вы представляете класс модели представления на основе шаблона проектирования mvvm, который обрабатывает все взаимодействия между действиями, фрагменты с использованием событий
для получения дополнительной информации.информация проверить это viewmodel