Android Data BindingでListener登録

# Android Data Binding

Android Data Bindingを使うと、LayoutファイルとJavaコードをBindingすることができます。データのセットやイベントハンドリングが容易になります。

概要とセットアップ方法はこちらに
https://developer.android.com/topic/libraries/data-binding/index.html

## Buttonのリスナー
### ボタン押下を受け取る

View.OnClickListenerインターフェイスを実装する。

```Java
public View.OnClickListener getOnClickListener() {
    return new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    };
}
```

実装したView.OnClickListenerインターフェイスをlayoutファイルにセットする。


```XML
<data>
    <variable name="fragment"
              type="jp.baroqueworksdev.sample.SampleFragment"/>
</data>
<android.support.v7.widget.AppCompatButton
        app:setOnClickListener="@{fragment.getOnClickListener}"/>
```

同様にFloatingActionButtonにOnClickListenerをセットすることも可能です。

```XML
<android.support.design.widget.FloatingActionButton
        app:setOnClickListener="@{fragment.fabOnClickListener}"/>
```



## EditTextのリスナー
### Textの変更通知
Textが変更通知を受け取るために、TextWatcherインターフェイスを実装する。

```Java
public TextWatcher getEditTextWatcher() {
    return new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int start, int count,
                int after) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
            // FIXME: when change text
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };
}
```

実装したTextWatcherインターフェイスをlayoutファイルにセットする。

```XML
<data>
    <variable name="fragment"
              type="jp.baroqueworksdev.sample.SampleFragment"/>
</data>
<android.support.v7.AppCompatEditText
        app:addTextChangedListener="@{fragment.getEditTextWatcher}"/>
```


## Spinnerのリスナー
### アイテム選択を受け取る

AdapterView.OnItemSelectedListenerインターフェイスを実装する。field変数として定義することも可能です。

```Java
public AdapterView.OnItemSelectedListener mOnItemSelectedListener =
        new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position,
                    long id) {
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        };
```

layoutファイルは、field変数で指定可能です。

```XML
<data>
    <variable name="fragment"
              type="jp.baroqueworksdev.sample.SampleFragment"/>
</data>
<android.support.v7.widget.AppCompatSpinner
    app:onItemSelectedListener="@{fragment.mOnItemSelectedListener}"/>
```

## ViewPagerのリスナー
### Pageの変更通知を受け取る

```Java
public ViewPager.OnPageChangeListener mOnPageChangeListener
        = new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
};
```

実装したインターフェイスをlayoutファイルにセットする。

```XML
<data>
    <variable name="fragment"
              type="jp.baroqueworksdev.sample.SampleFragment"/>
</data>
<android.support.v4.view.ViewPager
        app:addOnPageChangeListener="@{fragment.mOnPageChangeListener}"/>
```

(随時、更新します)