ZolkiBy
ZolkiBy

Reputation: 123

Android DataBinding with selector view

I want to use selector with view (favorite button) and Data Binding library. This is my layout:

<?xml version="1.0" encoding="utf-8"?>
<layout ...>
<data>
    <variable
            name="obj"
            type="com.zor.dev.simplebelnewsreader.instance.News"/>

    <variable
            name="handler"
            type="com.zor.dev.simplebelnewsreader.handler.Handlers"/>
</data>
<View
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:id="@+id/selectorButton"
            android:onClick="@{() -> handler.setFavorite(obj)}"
            android:background="@drawable/fav_button2"
            app:selected="@{obj.favorite}"
            android:layout_marginStart="20dp"/>

This is my Handler:

 public void setFavorite(News news) {
    news.setFavorite(!news.isFavorite());
}

and this is selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
      android:state_selected="true"
      android:drawable="@drawable/ic_star_purple_a400_24dp"
      >
</item>
<item android:drawable="@drawable/star_favorite_not">

</item>

And nothing, when i clicked item. What wrong in my code?

Upvotes: 0

Views: 1259

Answers (2)

S Haque
S Haque

Reputation: 7281

Xml:

<View
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:id="@+id/selectorButton"
            android:onClick="@{() -> handler.setFavorite(obj)}"
            android:background="@drawable/fav_button2"
            app:selected="@={obj.favorite}"
            android:layout_marginStart="20dp"/>

Handler:

public void setFavorite(News news) {
    news.setFavorite(!news.isFavorite());
    notifyPropertyChanged(BR.favorite); //'favorite' is the boolean variable name
}

Upvotes: 0

ZolkiBy
ZolkiBy

Reputation: 123

I only forget to set data and handler in my Activity when inflate DataBinding like this:

binding.setObj(data);
binding.setHandler(new Handlers());

Upvotes: 1

Related Questions