2016_01_05週_Parcelable内のwriteとreadの順番他

毎日メモはしてるので土日にまとめて公開することにします。 一週間経つだけでも全然忘れてしまうな…。ブログに公開することで、自分が目に通す回数を増やしたりできればいいな。 良い復習にはなりそう。

JVMJREの違い

聞かれてわからなかった・・・

http://www.mltlab.com/wp/archives/406www.mltlab.com

Dalvikとは

e-words.jp

http://www.wdic.org/w/TECH/Dalvikwww.wdic.org

WebViewのonReceivedErrorが呼ばれない

API 23ではonReceivedErrorの仕様が変わったそう。 でも新しいonReceivedErrorだとネットワークエラー時に呼ばれない。

complieSdkVersionを23にすると非推奨の打ち消し線が入るのでなんでこうなっているのかわからなかった

何が原因なんだろうか、なにかのverな気がする… 結局compileSdkVersionを22に下げても、6.0端末で試してもこの新しいonReceivedErrorは呼ばれなかった

LinearLayoutでparentBottomを表現する

http://ichitcltk.hustle.ne.jp/gudon2/index.php?pageType=file&id=Android055_layout4ichitcltk.hustle.ne.jp

特定のコミットからブランチを切る

qiita.com

デフォルトのDialogを使うのがよくない理由

numalog.relva.org

getFragmentManagerとgetSupportFragmentManager

 getSupportFragmentManager().executePendingTransactions();
        if (getSupportFragmentManager().findFragmentByTag(DatePickerDialogFragment.TAG) != null) {
            return;
        }
        DatePickerDialogFragment.newInstance().show(getSupportFragmentManager(),
                DatePickerDialogFragment.TAG);
                

ダイアログの二重起動での制御について、 findFragmentByTag()がいつもnullで帰ってきてしまう問題。

今回はsupportのDialogFragmentを使ってるので、FragmentManagerを呼ぶ時はサポートの方で呼ばなくては返ってくるFragmentManagerが異なる。

getFragmentManager()getSupportFragmentManager()も呼べるため、なぜ合っていないのか気づきにくかった.

supportlibraryを使ってるのかそうでないのかみたいなところが意外と時間を食われる元な経験が最近多い…

stackoverflow.com

stackoverflow.com

久しぶりにgitでミスった

最近revertとかresetなど多用していてdiffがすごいことになった死にたい

masterとheadのdiffを一覧で見る

git diff master..head --stat

一度pushした後にローカルでresetしたりするとnon-fast-forwardで怒られる

git push origin :hoge

で空をremoteのhogeブランチにプッシュすることになるので、リモートのブランチが消える

git push origin hoge

でもう一度pushすればいい

特定のファイルだけmergeする

qiita.com

文字列のちょっと凝った操作

意外とよく使うけどすぐ忘れちゃう

http://y-anz-m.blogspot.jp/2011/03/android-xml.htmly-anz-m.blogspot.jp

どのタイミングで状態が変わるのかコメントに付け足しておく

void hoge(){
if(mDisable){
    return
}
mDisable = true;
・
・
・

のようなインスタンスフィールドのboolean値などはなるべくインスタンスフィールドに持たない方がよいと言われてるくらいだから、 どの状態で変わるのかはコメントしておいたほうがあとで見た人(自分も含む)が理解しやすそう。

今回は親のクラスで使われている変数だったため、なおさら。

license情報

vividcode.hatenablog.com

  • リリース用のものだけでOK(リリース用apkに含まれるもののみ)
  • テスト用・デバッグ時にしか使ってないもの(loggingのものなど)は表示しなくてよい

AndroidManifest Activityの設定

http://docs.monaca.mobi/cur/ja/reference/reference/config/android_configuration/#manifest-xmldocs.monaca.mobi

自動でlabelがついてくるけど、特になくてもよさそう。ある場合は、lancherの時アプリ名として表示される。 なかったらデフォルトのものが表示される。

Acitivityのデフォルトに入っている値を利用する

知らなかったけど結構、元々用意されているものが多い。自分で定数設定しなくて済むので、いろいろ書き留めておきたい。

ActivityのRESULT_OK ex)Activity.RESULT_OK

MVP設計におけるDtoを持つ場所

Activityにインナークラスで次画面に渡すためのインナークラスを持っていたところ、インターフェースに持つよう指摘された

理由としては、Activity / Fragment に関係なく、View に固有する dto であれば、View のインターフェースの定義するのが望ましいからです。

どこに依存している情報なのか?を考える。

strings内のCDATA内でのエラー

ライセンスページを作ってる際にエラーが出た

d.hatena.ne.jp

インターフェース内の省略範囲

  • インターフェース内に定義した内部クラスにpublic staticは省略できる
  • コンパイルすると自動的に付与してくれる

Parcelable内のwriteとreadの順番

 @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(mUrl);
            dest.writeInt(mTitle);
        }

        public ParamDto() {

        }

        protected ParamDto(Parcel in) {
            mUrl = in.readInt();
            mTitle = in.readInt();
        }

このwriteとreadの順番が逆になっていると変数に入ってくる情報が変わってくる

Linearlayout内にdivider

真ん中だけ動的に区切り線をいれたいが、linearlayoutにviewをaddviewをしても、反映されなかった

qiita.com

dividerというものを設定できるみたいなので、これ便利

./gradlew app depencies

で依存しているライブラリを表示する gradleコマンド

ビルドが通らないソースをコミットしない

当たり前だけど、タイポミスがあったままコミットしてしまった。

javadocのtips

こんなのもある blogs.oracle.com

inflateの引数

inflate()の第三引数の話。 第三引数のboolean attachToRootの値は、falseにしないと第二引数に渡した親viewが返り値として返ってくる。

http://developer.android.com/intl/ja/reference/android/view/LayoutInflater.html#inflate(org.xmlpull.v1.XmlPullParser, android.view.ViewGroup, boolean)developer.android.com

scrollView内のlinearLayout

scrollViewもその中のlinearlayoutいずれもwrap_contentが推奨されている 実際にscrollView内のlinearLayoutにmatchをつけてもmatchにならない

  <style name="TaskDetailButton" parent="@style/Widget.AppCompat.Button.Borderless">