めちゃハマりました。
ScrollViewを継承したクラスを作成したのですよね。
class MYScrollView(
context: Context,
attrs: AttributeSet? = null
) : ScrollView(context, attrs) {
override fun onScrollChanged(l: Int, t: Int, oldl: Int, oldt: Int) {
super.onScrollChanged(l, t, oldl, oldt)
}
// ...いろいろ
}
こんなのです。で、これをとりあえずAndroid Studioからアクティビティ一つだけのプロジェクトを作って、そこにこのViewを張り付けて動作確認したら、なんと onScrollChangedがコールバックされない!
まじ??一瞬目を疑いました。そこからググって色々な方法を試しましたが結局解決せず。
この方法は別のアプリでは動いていたんです。新規プロジェクトを作ったからといって動かないはずはない。
で、あれこれ調べてようやく解決しました。
原因は、Acitivtyのレイアウトに直接MyScrollViewを書いていたこと。
で、解決策はFragmentのレイアウトにMyScrollViewを書くこと。
でした。
。。。何を言っているかわからない。と思いますが、私も何を言っているのかよくわかっていません。なぜこれで動いたのか。なんてことは考えたくもないです。とにかく動いた。よかったよかった。
で、この問題、ScrollViewだけでなくRecyclerViewとかも同じようです。とにかくコールバックされたければFragmentにViewを配置すべし。ってことですかね。
教訓:動作確認用プロトでも、Fragmentは履かせましょう