fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

2018年に見たアニメ

毎年恒例のやつを今年もやります。タイトルの並び順は50音順です。カッコ[ ]つきのものは録画したけどまだ見てないというやつです。必ず見るのでいつかは外れると思います。

冬クール

ヴァイオレット・エヴァーガーデンとよりもいを見て毎週泣くおじさんと化したクールだった。

春クール

ウマ娘さんはアニメはものすごくよかったのでもっと頑張ってはやくゲームをリリースしてほしい。「スポ根ものいいやん」となったきっかけ。

夏クール

はねバドで試合中に顔つきが変わるやつ、僕は宝塚システムと勝手に呼んでいた。最終回のカタルシスは比類なきものだったと思います。ハ行のアニメ大杉。

秋クール

グリッドマンは男の子が好きなやつで完全に満たされていたのでとてもよかった。ひそまそJOJOリリスパは個人的にぺろぺろ三部作(三部作ではない)と呼んでいる。ア行のアニメ大杉。

劇場版

リズも若おかみもどちらも衝撃だったと思う。どの作品も全体的に美術が素晴らしく、よく動き、そして泣けた。

参考: 2018年度のおすすめアニメランキング【あにこれβ】

RobolectricでRecyclerView.smoothScrollToPosition()を呼ぶとテストが進まなくなる(未解決)

ViewPagerの代わりにRecyclerViewを使ってチュートリアルの紙芝居を実装したのだが、進むボタンをN回押してサインアップへ進む画面に行くテストがいつまで経っても終了しない現象が起きた。諸事情によりprintデバッグを使って二分探索的にどこで止まっているかを調べたところ、どうもDatabindingでRecyclerView.smoothScrollToPosition()を呼んでいるところが怪しいということになりぐぐった結果、次のissueを発見した。

github.com

私の環境ではRobolectricは4.0.2だが、issueが出たのがだいたい1年前で、他の人が4.1-SNAPSHOTでも起きていると言っているので根が深そう。EspressoのswipeLeft()を使ってみたがこれもハングした。しかし、RecyclerViewActions.scrollToPosition()を使うとページを送ってやることはできた。ただ、この方法ではスクロール位置がコールバックに渡って来ないので、「ページ番号が変わっているか」みたいなことはチェックできないかもしれない。

結局、いい回避策が思いつかなかったので棚上げしてしまった。アニメーションが絡むとなんかうまくいかないのかなとか、スクロールした量(xとかy方向の移動量)を計算できないのかなとかいろいろ想像してみるけど全然わからない。知っている人がいたら教えて欲しい。できれば直してくれるとありがたい。

以下は本件とは関係ないけどいい本なのでみなさん買ってください。

peaks.cc

peaks.cc

AndroidのLiveDataとかViewModelについて考えるとりとめのないこと

  • LiveDataはデータホルダなので、覚えておきたいことを覚えておくために使うのがよい。表示したいデータとか、画面の状態など。私は、イベントやメッセージは受けた人が覚えておくべきものではないと考えているので、イベントバスやメッセージパッシングのために使う時にはなんらかの工夫が必要だと思っている。そういうことがしたくなったらReactive extensionとかを使ったほうがいいかもしれない。
  • ViewModelActivityFragmentではなくViewDataBindingに結びついていると考える。バインドしたいデータのソースが複数種類あるならViewModelを継承したインタフェースか抽象クラスをViewDataBindingクラスにセットできるようにしておく。IntentFragmentのArgumentを使ってViewModelのクラス名を渡すなどしてやれば、ActivityFragmentはどのViewModelを取得すればよいかわかる。
  • LiveDataはたとえ同じオブジェクトがset/postされてもObserver.onChanged()を呼ぶ。これが嫌ならObservableXxx系のクラスを使ってバインドするか、BindingAdapterで前回バインドした値を受け取って新たにセットするかどうか決めるのがいいのだろうか。MediatorLiveDataでラップしたものを使うほうがスマートかもしれない。
  • こういう使い方はよくないのかもしれないけど、ViewModelActivity単位で共有するように作ったかとか、Fragmentごとに別々に持っていてもいいのかとか、ProviderのFactoryとかタグは必要なのかとか、やっているとすぐ忘れてしまうので、ViewModelごとにXxxViewModel.getInstance(FragmentActivity, ViewModelProviders.Factory)みたいな感じのメソッドを用意している。
  • RecyclerViewを持っている画面のViewModelをそれぞれのアイテムビュー(RecyclerViewの子要素)に渡したくなることがあるのだけど、なんとなく違和感を覚えてしまう(なんとなくなので杞憂ならそれでいいんだけど)。データだけならAdapterの中でバインドしてしまえばいいのだと思うのだけど、クリックイベントを拾って選択状態にしたいとか画面遷移したいとかいうことをやろうとするとViewModelでイベントをさばきたくなってしまう。RecyclerViewを持っている画面のViewModelって他に何かやることあるのっていう気もしていて、だったら各アイテムビューにViewModel渡してもいいじゃんと思ったり、実はそういう画面にはそもそもViewModelいらないのでは?と思ったりもして迷宮入りしている。

peaks.cc

peaks.cc