土曜日, 8月 29, 2009

[Android] サブメニューの作成

androidでメニューをXMLで書くときの、サブメニュー(クリックしたら更にその中から表示されるメニュー。選択肢だけが画面中央にでる)は以下のように書きます。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/main_Sort" android:title="ソート"
android:icon="@android:drawable/ic_menu_more">
<menu> 
<item android:id="@+id/main_Sort_1" android:title="すれ違い日時" />
<item android:id="@+id/main_Sort_2" android:title="すれ違い回数" />
    </menu> 
</item>
<item android:id="@+id/main_Input" android:title="入力" />
<item android:id="@+id/main_Stop" android:title="停止" />
<item android:id="@+id/main_Exit" android:title="終了"
android:icon="@android:drawable/ic_menu_close_clear_cancel" />
</menu>

木曜日, 8月 27, 2009

[Scala] Antでfscを

Scalaはコンパイルが遅いので(Javaに比べて遅いかどうかは、Java開発をほぼしたことがないので不明)、Antでscalacタスクではなくfscタスクを使えるようにした。段どりは以下。

fscだけをコマンドで実行し常駐させる(helpが出る)
・上がったデーモンのポート番号を調べる(※1)
・それをファイルに書く(※2)
・build.xmlのfscタスクでそれを指定(serverオプションにて)

(※1)は以下にポート番号でファイルができるのでそれを見ます。
d:\scala-2.7.5.final\var\scala-devel\scalac-compile-server-port

不思議なことに、fscのデーモンさんはPCをスタンバイにすると死んでしまうようなので、そうなると(※2)を毎回やらなくてはならず不便。。

今日AntでJavascript実行ができることに気がついたので、(※1)も(※2)も、それで何とかできると思います。

追伸:
今のところ致し方無い。そもそもWindowsじゃなければ、こんな面倒なことはないのだけど。

追伸2:
以下でポート番号を動的にantから取れそうです(参考にさせて頂いたページ)。
 <target name="fileList">
<script language="javascript">
<![CDATA[

ls();

function ls() {
var curDir = (new java.io.File("/scala-2.7.5.final/var/scala-devel/scalac-compile-server-port"));
var list = curDir.listFiles();
for (var i = 0; i < list.length; i++) {
print(baseName(list[i].toString()));
}
}

function baseName(path) {
// var sep = environment["file.separator"];
var sep = "\\";
var i = path.lastIndexOf(sep);
return path.substring(i + 1);
}

]]>
</script>
</target>

月曜日, 8月 17, 2009

[Scala] AndroidのHandlerとか

Scalaでのコーディングにおいては、特別な処理をしないならopsfutureメソッドで別スレッドで処理を実行、結果は(Android的に正しく)Handlerのpostでメインスレッドに戻すのが正解な気がしています。

、、と思っていたのですが、(futureで作ったかにかかわらないと思うけど)スレッド側でExceptionしててもログに出ない様子?

日曜日, 8月 09, 2009

[Scala] UriMatcher

ScalaでAndroidプログラミングをして、UriMatcherのmatchメソッドが使えず困った。
結局、matchが予約語だからバッククオート(`)で括ればOKでした。

ふつう、URLのマッチをとってそれを(Scalaだから)さらにmatchでcaseしてゆく、、ので確かに、書きながらややこしいなぁ、とは思っていましたが。

今はAndroid的売り(だと思う)ContentProviderを作ろうとしておりハマり中。マニフェストへ記述したら、なぜかClassNotFoundといわれてアプリごと起動不能に。。