How to get data from DialogFragment to a Fragment?

后端 未结 6 1199
独厮守ぢ
独厮守ぢ 2020-11-30 22:13

Imagine, I have FragmentA from which I startDialogFragment (there are EditText in box). How to can I get back the value from the EditTex

6条回答
  •  旧时难觅i
    2020-11-30 22:36

    One of the better and simpler ways to do this is using Android ViewModel.

    This helps in easier sharing of data, without the need of sending any data across fragments. You could do this not only for DialogFragments, but also for normal Fragments.

    Source: https://developer.android.com/topic/libraries/architecture/viewmodel

    Here is what I did

    My ViewModel looks as below

    import android.arch.lifecycle.LiveData;
    import android.arch.lifecycle.MutableLiveData;
    import android.arch.lifecycle.ViewModel;
    
    public class PlayerViewModel extends ViewModel {
        private final MutableLiveData selectedPlayer = new MutableLiveData<>();
    
        public LiveData getSelectedPlayer() {
            return selectedPlayer;
        }
    
        public void selectPlayer(Player player) {
            selectedPlayer.setValue(player);
        }
    }
    

    In the Fragment where I select a Player, I use the following code in the onCreate method to bind the ViewModel

    playerViewModel = ViewModelProviders.of(getActivity()).get(PlayerViewModel.class);
    

    When a specific Player is selected, use the following (You can use an ArrayAdapter, DialogFragment's selector or anything you want to display list of players)

    playerViewModel = ViewModelProviders.of(getActivity()).get(PlayerViewModel.class);
    

    And finally, in the fragment where you need to show the Player information, do the following in the onCreate method

    PlayerViewModel model = ViewModelProviders.of(getActivity()).get(PlayerViewModel.class);
    model.getSelectedPlayer().observe(this, new Observer() {
        @Override
        public void onChanged(@Nullable Player selPlayer) {
            if (selPlayer != null)
                player = selPlayer;
                populateData();
            }
        });
    

提交回复
热议问题