Android Spinnerでkey-valueを使うには?
今日は僕の誕生日なので、誕生日ネタを書くことにした。
皆さんもよく唐突に、誕生日を公開しちゃおっかなーて時があるかもしれない。
そんな時に思うのが、
「せんせーい、たんじょうびって、XXXX年とか入るんですかー?」
って事だとおもう。
画面イメージでいうと、こんな感じ。
iPhone, Androidアプリ「Eyeland」よりAndroid版の画面を拝借
Copyright (c) Oceans Inc. All Rights Reserved.
AndroidだとSpinnerでつくれるやーと思ってたんだけど、
「すべて公開とか」表示している名称と、
名称に紐づけたい区分値の管理の管理の仕方が見つからない。
あれー、そいうの標準で用意してないのかなーと思いつつ、
誕生日だしせっかくなので、作ってみた。
- FormActivity.java : Spinnerを表示したい画面さん
- KeyValueAdapter.java : SpinnerにぶっこむAdapterを毎回プライベートに持つのもなんだし
- SpinnerHelper.java : SpinnerにぶっこむAdapterをarrays.xmlから召還
- SpinnerObject.java : getter, setterががが
- arrays.xml : 「表示したい内容」と「表示したい名称と区分値の紐付け」
以下、ソースですけど、
こんなの、もっと簡単に標準で用意してないんすかね
教えてエロい人。
pod installできなくて困っていた件を解決した
気づいたら、こんなことになっていて、、、
> Installing MBProgressHUD (0.7) > GitHub download $ /usr/local/bin/git config core.bare true $ /usr/local/bin/git config core.bare true > Updating cache git repo (/Users/togu/Library/Caches/CocoaPods/GitHub/ef81a51251a828eea52cbd59e57827b0007c9dba) $ /usr/local/bin/git remote update error: cannot open FETCH_HEAD: Permission denied [!] Pod::Executable remote update error: cannot open FETCH_HEAD: Permission denied
言われた通りの場所が、rootになってた
なんでだろー?と思いつつ自分の権限にかえて、pod installで決まり
# ls -l /Users/togu/Library/Caches/CocoaPods/GitHub/ef81a51251a828eea52cbd59e57827b0007c9dba -rw-r--r-- 1 root staff 6028 8 19 18:54 FETCH_HEAD # sudo chown togu:staff
複数のEditTextがジムやボールのようにTextWatcherした
追記:20130731
TextWatcher#onTextChanged(CharSequence s, int start, int before, int count)
このcountて文字数が返ってくるけど、数値を入力すると0 or 1しか返ってこなかった。
s.lenght()の方が良いかなと思い修正。
豆腐になったビグザム
最近、豆腐になってたビグザムさん。
子供の頃から今でも一番好きなMA。
なんで、これが好きかというと、
他者の追随を許さない圧倒的なバランスの悪さが、とても心に響く。
そして、この人、ドズル中将。
cvさんはお亡くなりなってしまっており、もうあの名言が聴けないかと思うと残念。
本題
EditTextが並ぶような入力画面をせっせと作ってて、
あれ?と思ったこと。
EditTextの入力値チェックをやりたいんだけど、
複数のEditTextを同時に対象とすると、良い解決方法がなかた。
もしかしたら、何か標準的なやり方が用意されているのでは?と調べても、考えても思いつかない。
なので、TextWatcherを実装して、こんなの作って解決してみた。
ねー、他に何かないのかな?
汎用的なAlertDialogを用意ついでにDialogFragmentデビュー
AlertDialogを汎用的につくろうと思って、下記を参考にDialogFragmentデビューしてみた。
http://d.hatena.ne.jp/sakura_bird1/20130207/1360193574:DialogFragmentでシンプルで汎用的なダイアログ
イメージ的にはこんな感じだけど、
これだとFragmentが再生成されたときとかに落ちてしまうはず。
ま、それは別の話しなので、そのうち。
https://gist.github.com/neiraza/6076893:neiraza / CommonDialogFragment
UITextFieldの本当の文字数をみてなかた
ほんたったで写経したり、設計書や資料集やらを置いて捗りまくりです。
- 出版社/メーカー: 株式会社エジソン
- メディア: オフィス用品
- 購入: 1人 クリック: 36回
- この商品を含むブログ (1件) を見る
本題
UITextFieldを2つ、UIButtonを1つの画面を作っていて、
UITextFieldが2つともN文字以上の場合のみ、UIButtonを有効にしたい
こういう時、UITextFieldDelegateを使いますよね。
UITextFieldDelegate Protocol Reference
たぶん、使うのはshouldChangeCharactersInRangeだと思うんですけど、
なんか思い通りにいかなくて。
hogeTextFieldの長さを取得するのに、
int hogeLen = hogeTextField.text.length;
こうしてるんだけど、
1文字入力
hogeLen :0
⬇
1文字削除
hogeLen :1
なんでだよーと思ってたら、ようはdelegateで捕まえてきた時の入力前の状態なのね。
というわけで、shouldChangeCharactersInRangeの引数を使って解決。
まとめ
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSMutableString *str = [textField.text mutableCopy]; [str replaceCharactersInRange:range withString:string]; /* * あとはlengthをとって、文字数オーバならNOを返せばいいし、 * 問題ないなら、そのhogeTextField.selected = YESとかしちゃって、 * 他UITextFieldのselectedをみつつ、条件が合致すれば、button.enabled でいいかも */ return YES; }
とあるiOSの残念なバグ
動いていない自分のアプリを眺めてて、残念すぎるバグを見つけてしまったのでメモ。
関係ないけど、今日も動画を貼っておく
『とある科学の超電磁砲S』のOP
これを歌ってる人のPVにはタッチが出ていて、「とある双子の幽体離脱」状態だた。
fripSide - sister's noise [ANIMAX STUDIO MUSIX ...
さて、本日の本題に入ろうか
エラー的にはどっかでメモリが解放されてしまってて、
おまえの見たい先なんてねーよって言われてた。
そもそも、このアプリっていつ作ったんだっけと思いつつ、
ログをみると、
Application windows are expected to have a root view controller at the end of application launch
これ、なんだけかーと思って、AppDelegate.mを見ると、
こんな記述を見つけて、ios6からsetRootViewControllerとか書かないと
警告でるとかだったような思い、
[self.window addSubView:hogeViewController.view];
こう書いてみたら・・・・
[self.window setRootViewController:hogeViewController];
何事もなかったように、動き始めた。
激しく無駄な時間を過ごした、日曜日の夜。
タッチイベントをスルーとか
あるviewのタッチイベントをスルーしつつ、そのview上のボタンイベントを拾いたい。
例えば、viewAの上に透明なviewBをのせて、viewB上にbtnCを置くとか。
これ特別なことではないんだけど、
AndroidとiOSをいったりきたりしてると、よく書き方を忘れてしまうので。
*今日の息抜きMAD (もうすぐDVD1巻発売ですね記念)*2013/6/17現在
【MAD】俺の妹がこんなに可愛いわけがない 『これが私の生きる道』 - YouTube
viewをスルーしたいだけなら、これでも可。
ただし、view上のボタンもスルッと抜けてしまうはず。
userInteractionEnabled= NO;
そこで、これ。
オーバーライドしちまって、特定のviewだけふがふが。
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event { UIView *view = [super hitTest:point withEvent:event]; if ( self == view ) { return nil; } return view; }
6月19日発売、『俺の妹がこんなに可愛いわけがない。 1(完全生産限定版) [Blu-ray]』
特典に、原作者書き下ろしの短編小説がついてくるとか。