Skip to content

Ilhasoft/android-data-binding-recyclerview

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Android Data Binding + RecyclerView

Using Recyclerview with the new Android Data Binding framework.

demo

How to start?

Just clone this repository and start playing with it! If you want to use some parts of this repository in your project read below.

Change your gradle file

  • In your main build.gradle add:
classpath 'com.android.tools.build:gradle:1.3.0-beta1'
classpath "com.android.databinding:dataBinder:1.0-rc0"
  • In your app build.gradle add:
apply plugin: 'com.android.databinding'

Modify your layout

Remember to use your classes and packages ;-).

<!-- layout.xml -->
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
              <variable
                  name="usersViewModel"
                  type="net.droidlabs.mvvmdemo.viewmodel.UsersViewModel"/>
    </data>

<android.support.v7.widget.RecyclerView
            android:id="@+id/activity_users_recycler"
            android:scrollbars="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:items="@{usersViewModel.users}"
            app:handler="@{usersViewModel.handler}"
            app:itemViewBinder="@{usersViewModel.itemViewBinder}"
            />
</layout>

Modify your activity

	// your activity
	@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
        //Create view model instance
        usersViewModel = new UsersViewModel();
        usersViewModel.users.add(new SuperUserViewModel(new User("Android", "Dev")));
        
        //Handle click event on list
        usersViewModel.handler = new ClickHandler<Violation>() {
            @Override
            public void onClick(Violation object) {
                super.onClick(object);
                Log.d("RecyclerViewBinding", "onClick() called with: " + "object = [" + object + "]");
            }
        };

	//Binding the view model to layout
        binding = DataBindingUtil.setContentView(this, R.layout.users_view);
        binding.setUsersViewModel(usersViewModel);
        
        //It's necessary to set the LayoutManager for the RecyclerView
        binding.activityUsersRecycler.setLayoutManager(new LinearLayoutManager(this));
    }

Modify your ViewModel class

    public class UsersViewModel extends BaseObservable
    {
        public ObservableArrayList<UserViewModel> users;
        
    	public ClickHandler<Violation> handler;

        public ItemBinder<UserViewModel> itemViewBinder()
            {
                return new ItemBinderBase<UserViewModel>(BR.user, R.layout.item_user);
            }
    }

Some details

Your ViewModel (UsersViewModel in my example) should have field of ObservableArrayList type which will be bind to recycler view.

Next thing is ItemViewBinder. This class is used in BindingRecyclerViewAdapter for creating VieHolders and it's item views bindings. In my example I've created CompositeItemBinder in order to support two different item types with separate layouts. If you want to display list with one data type you can use ItemBinderBase:

	public ItemBinder<YourClass> itemViewBinder()
    {
          return new ItemBinderBase<YourClass>(BR.your_variable_name, R.layout.your_item_layout);
    }

Please look at UsersView.java and UsersViewModel.java if something is unclear.

About

Using Recyclerview with the new Android Data Binding framework

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%