简体   繁体   中英

MutableLiveData sets value but getValue() returns null?

I face this problem after migrating my project to androidx . It all worked like a charm before the migration (i had to migrate my project) but now i stand before this weird problem that didnt exist 10min earlier.

Scenario: Fragment 1 contains a listview of items and when user click on item i call my viewmodels setvalue() method and then fragment 2 appears to show the item user clicked on and for this i call my viewmodels getvalue() . The scenario is very simple.

Fragment 1:

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        viewModel.getClickedSong().setValue(viewModel.getSongs().getValue().get(position));

Viewmodel:

public MutableLiveData<Song> getClickedSong() {
    if (clickedSong == null) {
        clickedSong = new MutableLiveData<>();
    }
    return clickedSong;
}

Fragment 2:

viewModel.getClickedSong().observe(this, new Observer<Song>() {
                @Override
                public void onChanged(Song song) {
                    mySong = song;

I also tried: mySong = viewModel.getClickedSong().getValue() but this also returns null.

After hours of researching, testing etc. the fix was quite simple.

I changed this line of code:

viewModel = ViewModelProviders.of(this).get(SharedViewModel.class);

To this:

viewModel = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM