NFC関係の画面を作っているのだが、いくつか作っていると、だいたいどの画面でも同じようなことを書いていることに気付いた。
onResume()でenableForegroundDispatch()して、onPause()でdisableForegroundDispatch()して、あとはインテントが飛んできたときに処理する・しないを書いて・・・。
えーい、こういうときはActivityの派生クラスを作って、そこにまとめてしまおう。
abstractでextends Activityなクラスを作って処理をまとめた。
それはよかったのだが、「このActivityのときはやらないけど、それ以外ではやる」というのがあった。
タイトルバーをタップしたときに、一番上のActivityに戻る処理だ。
Activityが提供しているのが、一番下のクラス名を返すAPIだったので、それにあわせている。if (!getLocalClassName().equals(MainActivity.class.getSimpleName())) {getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
同じActivity名で別パッケージが存在すると区別はつかないのだが、まあこれでいいや。
クラス判定の時は以下の処理が素敵です。
返信削除if( this instanceof MainActivity){ ... }
これだと"同じActivity名で別パッケージが存在すると区別はつかない"問題は解消されるっす。
いつもありがとうございます。
削除この1行で!というよりも、Javaってそういうことができる言語なんですね・・・。
置き換えようかと思ったけど、そもそも基底クラスが派生クラスのことを考えるというのも変なので、タイトルバーをタップしても何もしないActivityと、それを派生させてタイトルバーをタップできるActivityを作った方がよいように思えてきました。。。
そうっすね!そもそも基底クラスが派生クラスを知ってる状態に問題がありますね。
返信削除基底クラスに処理可否のフラグを持たせて、派生クラスのコンストラクタかどこかでtrue or falseを設定させるとかいいかもしれませんね。
1つ、嫌なのが残りました。
削除このMainActivity以外は、タップするとMainActivityに戻りたい、という動作です。
ここまで来ると、もういいかな、と私は諦めて直打ちするんですが、まだ甘いですかね。。
Activityのライフサイクルに依存する処理は画面なしのFragmentにまとめると収まりがいいので、NFC関連の処理はFragmentに書いてますねー
返信削除Fragment・・・。
削除一時期から急に、フラグメントという文字をよく見るようになり、設定画面もPreferenceActivityからPreferenceFragmentになりつつあるようだったので、気にはしていたのですがノータッチでした。
よし、勉強って事で眺めてみますー
画面の有るFragmentはなれるまで使いところが難しいかもです。。縦で1画面、横にした時に2画面とかやらないのであればとりあえず放置でも。。
削除画面なしFragmentはお世話になったNFC HacksのHACK#37で使ったので、もしかすると参考になるかもしれません(宣伝
なぬっ、あのNFCのことならまずこの本を読めといわれているNFC Hacksに載っているんですね(くどい)!
削除読んでいったんですが、まだJavaの言語仕様とAndroidのライフサイクルが身についてないので、頭の中で絵ができあがりませんでした・・・。
まずは画面無しからはじめてみますー