0 と 1 の世界の見習い探検家

2017年08月

イメージ 1

明日は9月1日ということで、半額デーですが、明日から合宿のため行けず。。
我慢できずに本日行ってきてしまいました。

平日は今まで白飯は無料サービスでおかわり自由だったのですが、ここ最近の米の価格変動を受け、平日も土日同様有料化。
これに加え、価格もサイズごとに分かれ、最大サイズでないとおかわり自由のサービスも受けられなくなりました。
実質白飯の大幅な価格も値上がりです。

致し方ないですね。
ここ最近お腹周りが危惧されている身としては、むしろこれはちょうど良いのかもしれませんね?(

本日は電車を使わずに大学へ。
いろいろ荷物がありました故。

明日から大学のゼミ合宿です。
研究室のメンバーと大学の保養施設できたる中間審査(卒論の中間発表会)の準備を行おうと言う高尚な合宿です。
表向きは。

もちろん親睦的な意味合いもあります。


忘れ物がないかだけ確認して寝ます。

では。

イメージ 1

SpinnerとはWindows Formで言うComboBoxみたいな役割をしてくれるコントロールです。
通常、選択肢の設定はXMLで行いますが、もしそれをC#のコード上で行いたくなった場合のお話です。

流れは次のとおり。
1. ArrayAdapterを作成
2. ArrayAdapterに項目を追加
3. SpinnerのAdapterプロパティに作成したArrayAdapterを設定

C#のComboBoxではItemsプロパティがコレクションになっていて、そこにぼこぼこ放り込んでおけば良いという形でした。
Xamarin.Androidでは似ては居ますが、一度Adapterなるものを噛ませる必要があります。

さてさて、
まずは基本中の基本。
文字列をそのままぶっこんで見るやり方です。
データは適当ですが()

イメージ 2

簡単ですね。
問題は、このAdapterのAddメソッド。
実は引き数はStringではなくObjectなんですよね。
つまり、C#のComboBoxのItemsのようにどんな型のオブジェクトを放り込もうが、UI上ではToString()メソッドで返される文字列を表示してくれるんですね。

…というわけで、こんな型を定義。
LineInformationは鉄道の路線情報を表すクラスで、ToStringメソッドはオーバーライドしていないため、そのまま型名が返ってきます。
このLineInformationをSpinnerで項目として表示させたい!…ということで、この型のオブジェクトを内包してToString()時には路線名を返してくれるような専用型を定義してみとうというわけです。

イメージ 3

念のため、Java.Lang.Objectを継承する形にしておきました。
ポイントはToString()をオーバーライドしているという点です。

イメージ 4

あとはこうしておけば、記事の一番最初の画像のようにToString()の結果が項目名として表示されます。
こうすることで、逆に今度Spinnerで選択された項目をもとに処理を実行する際に便利に…

イメージ 5

Spinnerの選択中の項目はSelectedItemプロパティで取得できますが、最初その項目をAdapterに突っ込んだときのオブジェクトへの参照が返ってきますので、もちろんキャストも可能です。

こうしておけば、Spinnerで選択中の項目をもとに処理を実行する際に、裏で項目名を取得して、コレクションの中からその項目名が表すオブジェクトを探してなんて処理をしなくて済みますね。
要は、Windows FormのComboBoxと同じことが出来るということです。

9月の1日から4日まで3泊4日で大学のゼミの合宿に行ってまいります。

行き先は外房のほうにある大学の研修センター。
学生であれば格安で利用できる便利な施設です。

しかし合宿の前日である明日は研究室のゼミの日。
できれば準備に当てたいところですが、やらなくてはならないこともあるので、大学へ行ってきます。

では。

イメージ 1

NotSupportedException
Encoding 932 data could not be found. Make sure you have correct international codeset assembly installed and enabled.


はい。
モバイルアプリ開発について私はまだまだ初心者。
先日Xamarin.Androidでアプリを書いていたところ、このような例外に遭遇しました。

結論から言うと、AndroidアプリのプロジェクトでCJKを有効にすることで解決できました。

イメージ 2

プロジェクトのプロパティから設定できます。


最初意味が理解できずにとりあえず例外発生箇所を見てみました。
コードセット932、つまりはShift JISですね。

イメージ 3

特にプログラムに問題があるよういはお見受けできません。
昔、"Shift JIS"と指定するところでコードページ番号の932を指定したところ、mono環境で例外が出たことがありまして。
それに関連する問題なのかなと思ったのですが、ちゃんとコード上ではShift JISと指定しています。

ネットで調べてみたところXamarin.iOSの情報がヒットしました。
CJK?
あまり耳にしない名前でXamarin.Androidにもあるのかと探ってみたところ、ありました。
有効にすると、アプリも落ちること無く実行できました。

一つ気になったのが、この問題、
Debugビルドでは発生しないんです。

環境によって差異があるのかはわかりませんが、当方の環境ではReleaseビルド時のみ、Encodingの初期化部でアプリが落ちてしまいました。

Javaでのアプリ開発をすっ飛ばしていきなりXamarin.Androidを始めた人間なので、まだ学ばないといけないことはたくさんあるようですね。

このページのトップヘ