How to get a result from fragment using Navigation Architecture Component?

后端 未结 6 458
无人共我
无人共我 2020-12-13 06:07

Let\'s say that we have two fragments: MainFragment and SelectionFragment. The second one is build for selecting some object, e.g. an integer. Ther

6条回答
  •  既然无缘
    2020-12-13 06:37

    According to Google: you should try to use shared ViewModel. Check below example from Google:

    Shared ViewModel that will contain shared data and can be accessed from different fragments.

    public class SharedViewModel extends ViewModel {
        private final MutableLiveData selected = new MutableLiveData();
    
        public void select(Item item) {
            selected.setValue(item);
        }
    
        public LiveData getSelected() {
            return selected;
        }
    }
    

    MasterFragment that updates ViewModel:

    public class MasterFragment extends Fragment {
    
        private SharedViewModel model;
    
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
            itemSelector.setOnClickListener(item -> {
                model.select(item);
            });
        }
    }
    

    DetailsFragment that uses shared ViewModel:

    public class DetailFragment extends Fragment {
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
            model.getSelected().observe(this, item -> {
               // Update the UI.
            });
        }
    }
    

提交回复
热议问题