読者です 読者をやめる 読者になる 読者になる

【Android】【Retrofit】Retrofit 2.0.1使い方メモとハマりどころメモ

前書き 最近Retrofitを使うことがあったんですが、イントロダクションをちょろっと読んだぐらいだと「え、そーなの?」と思うような事象に何度も見舞われたので、メモしておきます。 APIの設定 HTTPメソッドやパス、クエリやパラメータなどを適当に作ったイ…

【Android】AndroidのData Bindingでできること(基本編)

前書き 最近(と言っても1~2ヶ月前の話ですが)、訳あって携帯を機種変更し、Android 5.1.1の端末を手に入れました。 いい機会なので開発環境も一新し、Eclipse + ADTとか言うファッキンな環境を捨ててAndroid Studio + Gradle + Kotlinに切り替えました。 …

【Android】ブラウザからのIntentの送信とアプリがインストールされてない場合のフォールバック

前書き ここ半年ほどコードよりも日本語を書く仕事がメインになっていて、それはそれは退屈かつシビアなものだったのですが、最近はまたちょこちょこコードを書く仕事をしています。楽しいです。 色々な都合から以前のように一日に何本も記事を書いたりはで…

【Android】Volley各種設定メモ

ちょっとVolleyを使いたい要件があるんですが、公式のドキュメントを読んでも「いや知りたいのはそこじゃねーよ」と言うものばかりなのでメモしていきます。 JavaDocはこれを参考にしています。正直このJavaDocが生成されたのがいつ時点のビルドかわからない…

【Android】ListViewを使うための基礎知識(1)

Androidアプリを作り始めた人が必ずつまづくListViewのバッドノウハウを書き溜めていこうと思います。 AdapterViewのしくみ 全体的にそうなんですが、ListViewはListViewのドキュメントだけ読んでいても全然わかりません。AbsListViewのドキュメントもあわせ…

Oauth認証をServiceで行う(あるいは、Serviceの結果をBroadcastReceiverで受け取る)

AndroidでTwitter4Jを使ってOauth認証を行う方法は以前[Android][Twitter4J]AndroidでTwitter4Jを使うときのノウハウまとめ(前半)と言う記事で紹介したんですが、何と言うか、単刀直入に言うとバグっています。 具体的にどのような事象が発生するかと言う…

【Android】アイテムクリック時にイベントを発生させるListPreferenceを作成する

相変わらずこのような愚にもつかないクソアプリを作っています。まぁ、楽しいんですが…。それなりには。 設計上Preferenceを多用するのが一番楽だと判断しましたし、それは恐らく間違ってないんですが、PreferenceそのものがAndroid SDKにおけるBad Partの一…

【Android】PreferenceActivityで使えるPreferenceを自作する

つい先日、むしゃくしゃしてこのようなアプリを作成、公開しました。 このアプリ自体は内輪ネタの極みなので死ぬほどどうでもいいんですが、色々と個人的に初めての試みがあり、その辺のノウハウをメモしていきたいなと。 と言うわけで、今回は自分でPrefere…

【Android】XmlPullParser使い方まとめ

前回の記事では何の説明もなくXmlPullParserを使ってHTMLをパースしましたが、一応XmlPullParserそのものの使い方も説明しておこうと思います。英語が読めるならドキュメント読むだけで十分だとは思いますが…。 XMLをパースするためのものなので、当然XMLの…

【Android】XmlPullParserでHTMLをパースする

pixivだとかgyazoだとか、あの辺のサイトの画像もプレビュー表示できたらいいなと思ったはいいものの、どうしてもスクレイピングしないと画像のURLがわかりません。 以前AndroidでWebスクレイピングをやった時はJerichoのAndroid版を使ったんですが、(当時…

【Android】android.widget.Filterがひどすぎるので作り直す

ListViewのデータをフィルタリングするのであればFilterを使うのが一番簡単です。 簡単なんですが、使い物になりません。と言うわけで、継承して作り直します。 android.widget.Filterの挙動 AndroidにおけるFilterっていっぱいありすぎるのでandroid.widget…

【Android】Executorを使用して独自の非同期処理を実装する(3)

前回はAsyncTaskを参考にしつつ必要なものを実装していきました。 今回はAsyncTaskではやっていないExecutorService#shutdownに関する説明と、実際どうやって動かしていくのかを軽く解説して終わりにしたいと思います。 ExecutorServiceのシャットダウン Exe…

【Android】Executorを使用して独自の非同期処理を実装する(2)

前回はExecutor、って言うか、java.util.concurrentパッケージを使って非同期処理を行う方法、Androidで使うならHandlerも必要だよねって話、でもその辺全部を実装する汎用的なクラスを作るとAsyncTaskになっちゃうよ、と言う話をしました。 今回は実際に作…

【Android】Executorを使用して独自の非同期処理を実装する(1)

非同期での画像処理関連を直したり、UserStreamのイベントを処理するスレッドプールをAsyncTaskのスレッドプールと共有させたりしていたら、何だか処理が遅くなってしまいました。 と言うか、AsyncTaskのスレッドプールだけだと流石に厳しいって言うか、スレ…

【Android】非同期通信で画像を取得する際のノウハウまとめ(2)

HTTP経由で画像を取得、ついでにサイズを自動で補正するメソッドを作成しました。 public class ImageUtil { public static Bitmap getBitmapFromHttp(String url, Point maxSize, boolean isSaveCache) { HttpURLConnection con = null; InputStream in = n…

【Android】非同期通信で画像を取得する際のノウハウまとめ(1)

以前AndroidでTwitter4Jを使うときのノウハウまとめとか言う記事でさらさらっと、お茶漬け感覚で解説したんですが、色々といい方法を新たに見つけたのでまとめておきます。 以前の方法での問題点 ざっと列挙すると、こんな感じです。 端末のサイズより大きい…

【Android】端末の方向やディスプレイサイズから色々なものを動的に変更する

ようやく忙しさが(多少)やわらぎました。 相変わらず時間を見てはのんびりと自作のTwitterクライアントのためのコードを書いており、ちょっとしたネタもたまってきたので吐き出していきます。 端末の方向を動的に取得 / 固定する Androidの端末の回転に関…

【Android】ListViewとActionModeを併用する

一週間ほど開いてしまいました。珍しくみんな忙しくてですね…。 最近自作のTwitterクライアントを公開しまして、まだまだαリリース段階なので色々と機能を追加しているんですが、ActionModeとListViewのCHOICE_MODE_MULTIPLEを併用しようとしたら三日間ほど…

【Android】Androidで使用するProGuard勘案

世の中にはProGuardって言う、成果物の不要なクラス・メソッドを自動で削除してくれたり、難読化してくれたりするツールがあります。Support Libraryを使うときはこれも使ったほうがいいとオススメされていたり、ADTでそれなりにサポートされているので使っ…

【Android】ListViewのHeader / Footerに関する処理をハックする(考察編)

以前ListViewのHeader/FooterのViewに直接イベントを設定すると言う記事の最後で「って言うかそもそも、addHeaderView / addFooterViewにクリック時のハンドラを渡せるオーバーロードがあればよかったんですがねぇ。」と書いたんですが、もう自分でその機能…

【Android】AsyncTaskLoaderをもっと便利にする(実践編)

前回の続き…ってもう一ヶ月以上前なんですね。時の流れは早いものです。 別に書くのをサボっていたわけではなく(サボっていたけど)、まぁあの内容で大体なんとかなるので別に書かなくてもいっかなーと後回しにしていました。とりあえずもうクローズしてし…

【Android】Scala IDEを使ったAndroidの開発環境を構築する

特に何を作りたいわけでもないんですが、ちょっとしたツールを作るならJavaよりScalaの方が何かと楽ちんなので、開発環境を構築することにしました。 一昔前だと「Scalaで出来なくもないけどクソ重い」とか「ADTと衝突してビルドがクソ面倒」とかそんな記事…

【Android】クリック可能なToastをつくる(実装編)

Toastを作りなおそう。 androidのソースのライセンスがApache License 2.0じゃなかったら詰んでましたね。 とりあえずソースをコピペする 継承してどうにかなるものでもありません。ToastのソースをコピペするなりDLするなりして引っ張ってきて適当なプロジ…

【Android】クリック可能なToastをつくる(考察編)

今作っているTwitterのクライアントは常時UserStreamに接続、ふぁぼられたりRTされたりするとToastで表示すると言う誰しもが考えそうな承認欲求を満たすための機能がついています。 が、うっかり(n * 100)RT以上されるような長文Postをしてしまったがために…

【Android】Serviceとのプロセス間通信でデータを送受信する

AndroidではServiceを実装することでプロセス間で通信することが出来ます。 今回はMessengerを使ったServiceとActivityのデータの送受信方法について説明します。 Serviceとは? ドキュメントによるとこう説明されています。 サービスは、ユーザが異なるアプ…

【Android】Intentで渡すためのUriを作成する

Intent Filter編第二回です。今決めました。 前回はIntent Filterの設定方法と、暗黙的Intentを飛ばすときのお作法をやったので、実際にデータを送受信するUriの扱い方をまとめます。 URIのしくみ URIってそもそも何?とかそんな説明は面倒なんでしません。 …

【Android】IntentとIntent Filterの使い方

AndroidManifest.xmlにIntent Filterを設定しておくと、暗黙的Intentを受信することが出来ます。 IntentはAndroidアプリの根幹に関わる仕組みなので、ちょっと検索すればすぐに豊富な資料を見つけることが出来るんですが、「実際にどうやって書くのか?」と…

【Android】FragmentPagerAdapterを実装し直す

以前「FragmentPagerAdapter is クソ」と言う話とともにとりあえずの対処法を書いたんですが、全然対処できないケースがあることに気づいたので、ちょっと本気を出してPagerAdapterを継承して実装しなおしました。 GitHubに動作確認用のActivityとFragmentも…

【Android】FragmentPagerAdapterを実装し直す(補足編)

前回の記事に対する補足事項です。 文字数制限に引っかかってしまったので別の記事になってしまいました。 dataSetChangedの動き そもそもPagerAdapter#notifyDataSetChanged()が呼ばれるとどうなるのでしょうか。 ViewPagerのdataSetChangedの動きをたどっ…

【Android】Androidプロジェクトでjavax.annotation.processing(APT)を使う

Sqliteを使っていると一々テーブル名やカラム名を文字列で書かないといけません。コード補完も効かなくて面倒です。 そんなわけで無理矢理コード補完が使えるよう、「テーブルのメタ情報だけを持ったクラス」を作成し、そっから参照するようにします。 が、…

【Android】AsyncTaskLoaderをもっと便利にする(準備編)

大昔に「AsyncTaskLoader便利じゃね?いっぱい使うんじゃね?」みたいなことを書いたんですが、全然使ってません。以前作ったこの子が便利すぎるからです。 とは言えちょっと不満なところもあります。再帰の処理を組み込むと、結構読みにくいんです。AsyncTa…

【Android】Viewが表示された時のイベントを設定する

Viewが表示される瞬間のイベントを設定したいことがあります。 例えば、ListViewのフッタが表示されたら自動で次のデータを取りに行く、なんて処理。 世の中の人はこれを「最後尾までスクロールされたかどうか」を調べて実現するんですが、ちょっとクールじ…

【Android】Fragment単位でキーイベントを管理する

Androidのキーイベントの管理はActivity#onKeyDownで行うことが出来ます。 が、Fragmentにはそれに該当するメソッドがありません。呼び出したActivityのonKeyDownを実行してしまいます。 まぁ色んなActivityで再利用されることを前提にしているので、「Activ…

【Android】ActionBarのカスタマイズ覚書

HoneyCombから追加されたActionBarですが、あまりカスタマイズ性が高くなく、アクロバティックな手法を使わないとカスタマイズ出来ない箇所がいくつかあります。 需要は高そうなんだけどなぜかデフォルトのメソッドやプロパティとして提供されてないカスタマ…

【Android】FragmentPagerAdapterの中身を動的に変更する

注意 この記事はFragmentAdapterの使い方と言うよりは、FragmentPagerAdapter is クソみたいな話をします。 結論から言うと、FragmentPagerAdapter / FragmentStateAdapterの実装では内部のFragmentに対するreplaceやremoveは実質不可能です。 また、この記…

AndroidでTwitter4Jを使うときのノウハウまとめ(後半その2)

先に後編その1をよんでね! UserStreamを使用する 先に言っておくと、Twitterのガイドラインでは「携帯電話で使うならwifiかなんかに繋がってる時以外はやんないほうがいいよ。」と書かれているんですが、じゃあREST APIの使用回数制限もっと増やせやって話…

AndroidでTwitter4Jを使うときのノウハウまとめ(後半その1)

思った以上に間があいてしまいましたが、後半戦です。前半はこちら。 目次 後半はこんな話をします。 アイコンのURLをBitmapに変換しキャッシュする Timelineそのものをキャッシュする UserStreamを使用する 前半はこんな感じでした。 Twitterとの通信を行う…

AndroidでTwitter4Jを使うときのノウハウまとめ(前半)

とても今更ですが、意外とこの手のまとまった記事を見たことがないので、自分なりにまとめてみます。 私がAndroidの話をするとほぼ100%の確率でこのライブラリが絡んでくるんですが、この記事では頑張って封印します。超めんどくせー。 目次 前半はこんな感…

【Android】ListViewのHeader/FooterのViewに直接イベントを設定する

ListViewのHeader/FooterはAdapterを操作するのではなくListView#addHeaderViewもしくはListView#addFooterViewを使用するのが定石となっています。 ListViewにAdapterをセットする前にこのメソッドを呼ばなきゃいけないとか、上記のメソッドを呼ぶとListVie…

【Android】Fragment内で同一Fragmentを表示する

近年まれに見るハマり方をしてしまったのでメモしておきます。 やろうとしていたこと MainActivityでTimelineFragmentを表示→TimelineFragmentの要素をクリックするとTimelineMenuDialogFragmentを表示→TimelineMenuDialogFragmentのConversationをクリック…

【Android】Activityの内容を動的に生成する

こう、Activityのレイアウトとしては結構違うんだけど、まぁ大体要約すると「onCreateでProgressDialogを表示し、その裏でDBかWebから何らかのリソースをとってきて整形してListViewに表示する」みたいなのって、よくあるパターンじゃないですか。 こんだけ…

【Android】ListViewのレイアウトを動的に切り替える際の問題点

以前[Android](Expandable)ListViewで各データごとに表示を切り替えると言う記事で作ったアイテムごとに動的にレイアウトを切り替えられるListViewですが、ViewHolderを使った時にちょっとした問題が起こったので、メモしておきます。 [2013/03/28追記] なん…

【Android】SQLiteDatabaseの定形処理を作る

SQLiteDatabaseの処理は、SQLiteOpenHelperからDBをもらって、selectならカーソル開いて、更新ならトランザクションかけて…と、大体決まりきったものが多いです。 ちょっとしたことなら別にいいんですが、SQLiteをフル活用しようとしてDAOを作ってるとこの辺…

【Android】(Expandable)ListViewで各データごとに表示を切り替える

以前作ったやつを使っているうちに、「データの表示も動的に変更出来ないもんかなぁ…。」と思うようになり、まぁクロージャ使えば普通に出来るよね、ってことで、作ります。 親要素と子要素に追加するコード 要はExpandableListAdapter#getGroupViewとExpand…

【Android】ExpandableListViewの各データにイベントを設定する(完成版)

今更ですがあけましておめでとうございます。昨年からのやり残しがあったので消化していきます。 ExpandableParent<EventArg> 実際に出来たコードはこんな感じです。まずはExpandableParent<EventArg>。これは親グループになります。 public class ExpandableParent<EventArg> implements S</eventarg></eventarg></eventarg>…

【Android】ExpandableListViewの各データにイベントを設定する(案)

ListViewの方でやったものの、ExpandableListViewでも同じことをしたくなってしまったので、やってみます。 ただ、私はExpandableListViewをほとんど使ったことがなく、AdapterもSimpleExpandableListAdapterしか使ったことがありません。なのでいつものよう…

【Android】TextViewの文字列にリンクを設定する

TextViewにはautoLinkと言うAttributeがあって、これをつけておけばURLを自動でリンクしてくれるんですが、内部で使っている正規表現がお粗末なのか、単純にテストパターンに含まれてないのか、日本語URLも受け付けるつもりなのか、ともかく2バイト文字も平…

【Android】ListViewの各データにイベントを設定する

ListView、もしくはそれに設定されたAdapterから要素を取得するには、どうあがいてもpositionを使って取得することになります。 そして、ListViewにonItemClickListenerを設定しつつ、クリックされた場所に応じて動的に処理を変更させたい場合は、positionそ…

【Android】Adapterをforeachで使えるようにする

Adapterってあるじゃないですか。ListViewとか、ListViewとか、ListViewで使うあれです。あれ、foreachで回したくなりません? いや確かに、Adapterを作る以上、ほとんどの場合は何らかのIterableなもの(例外はCursorぐらい?あれもiteratorパターンではあ…

【Android】AsyncTaskの各種イベントを全部クロージャでフックする

昨日のやつは別にTwitterとの通信に限らず、もっと汎用的に出来るんじゃないの?と思ったので試し書き。30分ぐらいでサクラエディタで一気に書いたのでコンパイルが通るかも怪しいです。 コード public class ReactiveAsyncTask<Param, Progress, Result> extends AsyncTask<Param, Progress, ReactiveAsyncTaskResult<Result>> { privat</param,></param,>…