Как обмениваться данными между действиями с LiveData? - PullRequest
1 голос
/ 30 марта 2020

У меня есть две активности и один фрагмент. Я хочу поделиться данными между этими действиями. Фактически, когда пользователь изменил FragemtA в MainActivity, необходимо автоматически обновить FragmentA в SecondActivity. enter image description here

My ViewModel: PlayerFragmentVM. java

 public class PlayerFragmentVM extends ViewModel {
     private MutableLiveData<Boolean> btnFavoriteClickedLiveData;

     public PlayerFragmentVM(){
         btnFavoriteClickedLiveData = new MutableLiveData<>();
     }

     public MutableLiveData<Boolean> getBtnFavoriteClickedLiveData() {
         return btnFavoriteClickedLiveData;
     }
}

PlayerFragment. java

public class PlayerFragment extends Fragment {

    private FragmentPlayerBinding   fragmentPlayerBinding;
    private PlayerFragmentVM        playerFragmentVM;
    private ShineButton             btnFavorite;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        //init view binding
        fragmentPlayerBinding = FragmentPlayerBinding.inflate(inflater, container, false);
        View view = fragmentPlayerBinding.getRoot();

        //init ViewModel        
        playerFragmentVM = ViewModelProviders.of(this).get(PlayerFragmentVM.class);

        //button checked change listener
        btnFavorite.setOnCheckStateChangeListener(new ShineButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(View view, boolean checked) {
               //checked or not
               playerFragmentVM.getBtnFavoriteClickedLiveData().setValue(checked);
            }
        });

        //observe button checked change
        playerFragmentVM.getBtnFavoriteClickedLiveData().observe(this, new Observer<Boolean>() {
        @Override
        public void onChanged(Boolean checked) {
            //apply changes on View
            btnFavorite.setChecked(checked);
          }
        });


   }

}

Есть ли какое-нибудь решение для этого?

...