Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Data Binding with MVVM in Android

Introduction to Data Binding

Data Binding is a powerful library in Android that allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically. This results in less boilerplate code and a more streamlined development process.

What is MVVM?

MVVM stands for Model-View-ViewModel. It is a software architectural pattern that facilitates separation of development of the graphical user interface from the business logic or back-end logic. The MVVM pattern helps developers to separate the concerns of the application, making it easier to manage and test.

Setting Up Data Binding

To use data binding in your Android project, you need to enable it in your build.gradle file.

android {
    ...
    viewBinding {
        enabled = true
    }
}
                

Creating a ViewModel

The ViewModel is a class designed to store and manage UI-related data in a lifecycle-conscious way. Let's create a simple ViewModel.

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class MyViewModel extends ViewModel {
    private MutableLiveData text;

    public MyViewModel() {
        text = new MutableLiveData<>();
        text.setValue("Hello World!");
    }

    public LiveData getText() {
        return text;
    }
}
                

Connecting ViewModel with Activity

Next, we need to connect our ViewModel with our Activity. We will use the ViewModelProvider to get the ViewModel instance.

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import com.example.databinding.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    private ActivityMainBinding binding;
    private MyViewModel myViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
        binding.setViewModel(myViewModel);
        binding.setLifecycleOwner(this);
    }
}
                

Creating Layout with Data Binding

Finally, we need to create a layout file that binds to our ViewModel. Here's an example layout file:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="viewModel"
            type="com.example.databinding.MyViewModel" />
    </data>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="16dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{viewModel.text}" />

    </LinearLayout>
</layout>
                

Running the Application

After setting everything up, you can run your application. You should see the text "Hello World!" displayed on the screen, which is bound from the ViewModel.

Hello World!

Conclusion

In this tutorial, we covered the basics of data binding in Android using the MVVM pattern. We set up data binding, created a ViewModel, connected it to an Activity, and created a layout file that binds to the ViewModel. This separation of concerns makes the code more modular, easier to maintain, and testable.