How to get a ViewModel?

旧时模样 提交于 2019-12-08 11:52:26

问题


I just want to get a reference in my Fragment (extends Fragment) to my ViewModel.class (extends from AndroidViewModel). This is how it is described everywhere:

UserModel userModel = ViewModelProviders.of(getActivity()).get(UserModel.class);

description on Android Developer

..., but ViewModelProviders is deprecated since long ago.

*This class was deprecated in API level 1.1.0. *

I can't import the class with: android.arch.lifecycle.[ViewModelProviders]

it just offers ViewModelProvider and other stuff.


How am I able to get an instance of my UserModel.class?


回答1:


but ViewModelProviders is deprecated since long ago

ViewModelProviders is not deprecated. So, use ViewModelProviders:

ViewModelProviders.of(yourFragment).get(UserModel.class)

There are pieces of ViewModelProviders that are deprecated, such as its constructor, but the class overall is not.




回答2:


Here's how to write a ViewModel

public class MyViewModel extends ViewModel {
private MutableLiveData<List<User>> users;
public LiveData<List<User>> getUsers() {
    if (users == null) {
        users = new MutableLiveData<List<User>>();
        loadUsers();
    }
    return users;
}

private void loadUsers() {
    // Do an asynchronous operation to fetch users.
}
}

And then to use it in your actctivity do something like this

public class MyActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
    // Create a ViewModel the first time the system calls an activity's onCreate() method.
    // Re-created activities receive the same MyViewModel instance created by the first activity.

    MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
    model.getUsers().observe(this, users -> {
        // update UI
    });
}
}


来源:https://stackoverflow.com/questions/51264770/how-to-get-a-viewmodel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!