- Get link
- X
- Other Apps
- Get link
- X
- Other Apps
As define in Android developer,
The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way. TheViewModel class allows data to survive configuration changes such as screen rotations.
Let us assume, we are showing EMPLOYEE data on screen,
To implement ViewModel,
Step 1:
Create a DataModel class,
public class User {
public String empId;
public String empName;
public User(String empId, String empName) {
this.empId = empId;
this.empName = empName;
}
public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
}
Step 2:
Create a Repository, which will communicate between ViewModel and Data,
public class MainActivityRepo {
private static MainActivityRepo instance;
private ArrayList<User> dataset=new ArrayList<>();
public static MainActivityRepo getInstance(){
if(instance==null){
instance=new MainActivityRepo();
}
return instance;
}
public MutableLiveData<List<User>> getUser(){
setUserData();
MutableLiveData<List<User>> data=new MutableLiveData<>();
data.setValue(dataset);
return data;
}
private void setUserData(){
dataset.add(
new User("emp001","John Doe","http://lorempixel.com/400/200/sports/1/"));
dataset.add(
new User("emp002","Ray Ban","http://lorempixel.com/400/200/sports/2/"));
dataset.add(
new User("emp003","Don Brown","http://lorempixel.com/400/200/sports/3/"));
}
Step 3:
Create ViewModel,
public class MainActivityViewModel extends ViewModel {
private MutableLiveData<List<User>> users;
private MainActivityRepo mRepo;
public void init(){
if(users!=null){
return;
}
mRepo=MainActivityRepo.getInstance();
users=mRepo.getUser();
}
public LiveData<List<User>> getUser(){
if(users==null){
users=new MutableLiveData<List<User>>();
}
return users;
}
}
Step 4:
Create a layout xml,
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".oneWayBinding.oneWayBinding.MainActivity">
<TextView
android:id="@+id/tv_empId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
Step 5:
Create a MainActivity class,
public class MainActivityJv extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainActivityViewModel model = ViewModelProviders.of(this)
.get(MainActivityViewModel.class);
model.init();
model.getUser().observe(this, new Observer<List<User>>() {
@Override
public void onChanged(@Nullable List<User> users) {
changeUI(users);
}});
}
private void changeUI(List<User> user){
/** can get all user data from loop**/
// for(int i=0;i<user.size();i++){
// // Log.d("data:value",user.get(i).empId);
//
// }
TextView tv_empId=findViewById(R.id.tv_empId);
tv_empId.setText(user.get(0).empId);
}
}
Now rotate your screen , which will not effect on your activity and data.
Enjoy benefit the use of ViewModel,

Comments
Post a Comment