ややプログラム紀行

博士2年のプログラムに関する日記

Twitter4Jその2

最近ずっとTwitter4J使ってます、便利すぎてたのしいいいいいい

前回から大分いろいろなことをしたので、今回は自分の道しるべ的な意味で参考にしたサイトを貼りまくろうかなと思います

まず、公式のツイッタークライアントを目指してみることにしたのであの「ナビゲーションバー+タブ+スクロール」スタイルを実装してみました


これの通りにやればいいです
自分はくそ雑魚なのかすでにここで若干詰みました。スクロールして隠れるアクションバーにしたかったけれど、なぜかバーが2つ表示されるという…
設定でデフォルトでアクションバーをつけないようにするだけでしたね(ActionBar を非表示にし、かつメニューも有効にしたい!)
で、公式のアプリだとスワイプしてロードされるようになっているので自分もそうしました(パクリ乙


さっきでてきたCoordinatorLayoutの中にフラグメントをぶちこんで、そのフラグメントをSwipeRefreshLayoutにするっていう感じです
当然スクロールしたいのでSwipeRefreshLayoutの中にRecyclerViewを入れましたが、ここでSwipeRefreshLayoutの子ビューは1つだけにするということに注意してください
なんかそうしないとダメみたいっす

さらにRecyclerViewにはSortedListというものを使ってみました


これ、うまくできれば便利なんですがRecyclerViewってほんと曲者ですよね
SortedListは簡単にいうとリスナー付きリストみたいなもんです


あとはSwipeRefreshLayoutでスワイプを検知したらタイムラインを読み込めば良いですが、まずメインスレッドでネットワークのやりとりをすると怒られるのでAsyncTwitterを使う必要があります

ここがすごい引っかかりやすいんですが、AsyncTwitterでタイムラインを読み込むのは良いとしてもそれをそのままRecyclerViewにぶちこもうとするとうまくいきません(SwipeRefreshLayoutの更新マークがひっこまなくなる)
どうやら「UI系統はメインスレッドでいじらなければならない」っていうルールがあるみたいです
こんなの知らないっすよ~(T_T)これで3日ほどうんうんうなってました


なのでAsyncTwitterでgetHomeTimelineを呼び、リスナーのgotHomeTimelineでデータを受けとった後は、Handlerを使ってメインスレッドにRecyclerViewの更新をまかせるという方法をとる必要があります(自分はそうした)


これでとりあえずタイムラインの文章は読み込めるようになります
マルチスレッドとかあまりやったことない自分にはずいぶんきつい道のりでした…