2011年02月21日

webViewをAlertDialogに表示成功

いや、成功と言うほど大げさなお話ではないと思いますが、以前「WebViewはDonutで使えない?」というエントリーで書いたHTMLファイルをAlertDialogに表示したいという件、なぜかあっさり成功してしまいました。

一時は断念して、通常のテキストで中黒(・)などを利用して簡易ヘルプを作っていたのですが、文の途中から行間が1行空いて表示されるようになってしまい(原因不明)、回復できませんでした。
そのため、HTMLファイルの表示に再挑戦したのですが、前回のことは忘れて(いつものごとく)テキトーに記憶で書いていたら、あっさり表示できてしまったのです。

ちなみに、コードを抜粋すると、

final WebView webView = new WebView(this);
webView.loadUrl("file:///android_asset/help.html");

return new AlertDialog.Builder(クラス名.this)
.setIcon(android.R.drawable.ic_menu_help)
.setTitle("簡易ヘルプ")
.setView(webView)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();

ですが、前のことを忘れていたので(笑)、xmlファイルを作成せずにダイレクトにファイルを指定しています。
以前失敗したコードは

WebView webView = (WebView)findViewById(R.id.help);
webView.loadUrl("file:///android_asset/help.html");

です。

うーん。
例によって原理を分かっていないのですが、動いたからまあいいか(笑)。

posted by 白虹 at 23:06| Comment(1) | TrackBack(0) | Android開発

疲れている原因

完成が近づいたかと思うと、バグが発見され、修正して、テストをして、また完成直前かと思うとバグが発見されるという繰り返しが神経を萎えさせるというか疲弊する原因なのだなあ、と最近思います。(というか、このブログを読んでいる人もいい加減完成が近いという言葉は聞き飽きていると思いますし、我ながら狼少年のよう)
それというのも、きわめて保守性が悪いグチャグチャのコードを書いているからではないか?と自問します。
仮に完成するとして、完成品としてはほぼ処女作(コンパイルを行う本格的な?言語を使用したものにおいて)と言って良いものとしてはこんなものかも知れないとは思わないでもないですが、アプリの名前だけでも3〜4回、データベースの構造も5回以上、メニュー構成も3回くらい変えているくらいなので、それに伴う変更はものすごい数になる訳で、修正忘れも想像以上のものがあるはずなのです。
客観的に見てそんなに高機能でなくても、素人が初めて作るものにしては複雑過ぎたのでしょう。
才能がある人が創れば別でしょうけど、残念ながら才能(頭脳とセンス)が一番欠けていたようです。(笑)

そもそも動作チェックからしてかなり面倒なところがあるので、何度もやる気になれないのに、「バグ発見→修正→テスト→バグ発見・・・」の波が繰り返しやってくると、ホント疲れますし、テストするのが怖いです。
しかし、ここまで作って公開しないというのもやりきれないので、公開はすると思いますが、想い出作り(笑)に「永遠のベータバージョン」として公開するか、大量のバグレポート&低評価攻撃を受けて3日で取り下げか、どちらかになるのがオチでしょう。(苦笑)

posted by 白虹 at 22:59| Comment(0) | TrackBack(0) | Android開発

2011年02月17日

再びnull検出に戻す。そして……

今回更新の間隔が空いたのは、ひとつには変な理由があったからでした。
タイトルにある通りレコードを特定するのに、値のないカラムを使う方法から未使用時に空白を打ち込んで、その空白を検出する方法にいったん変更したのですが、再び値のないカラム(null)を検出する方法に変えました。
その理由は、やはりいちいち空白を打ち込むのは不自然だから。

しかし、真に時間がかかった理由はnull検出で、今後実装する予定であった「項目の移動」機能が成立するか証明しなければならないと思って前倒しで「項目の移動」機能を書いていたからでした。(とこうして述べても、どんなメモ帳アプリなのか明らかにしていない上では誰にも意味が判りませんね(笑))
ただし、移動機能なしで公開しようと思っていたくらいなので、予想通り移動機能は大変難しいものでした。
いままで書いたメソッドの中で(自分的に)最も複雑だったと言って良いかと思います。
もちろん、普通の頭脳を持っていれば難なく書けるものなのでしょうけど、僕の脳みそでは早々に思考が停止し、ログの結果を見ながら変数を調整するという非理論的な方法でコードを書いてます。
(そもそもループでカラムをandとかカンマで繋いでSQL文を生成するのって頭が混乱します)

そんなわけで、ようやく今日になってだいたい形になってきた気がしますが、まだ一部正しく動いていません。この間にも思わぬバグがいくつも発見され、その修正もしていたので一週間近くを費やし、かつ、やる気も記憶も失せて(本気でかなり前に書いたメソッドの意味が判らなかった)いたので、もう2月も半ばを過ぎてしまいましたねえ。
本当はListViewのItemではない余白のところをロングタップするとContextMenuが出るようにしたかったのですが(listView.setOnLongClickListener(l))、これはどうしてもうまくいかない模様。(listView.setOnItemClickListener(l)でないと駄目みたいですが、それならなぜsetOnLongClickListnerがあるのかも含めて分かりません)
これだけでも1〜2日費やしてしまった程なので。

そして、一通り動くようになったとしても、これからテストもやり直さなければなりませんし、また直したところから不具合が出るかも知れません。まだまだ時間がかかりそうですが、それより何より本当にこんなんで良いのだろうか?というそこはかとない疑問が浮かぶのを禁じ得ません。
前倒しで移動機能を書いたとはいえ、完成した気がまったくしませんし。
もちろん、公開はひとつの節目で、ベースとなるものがようやく完成するに過ぎない(本来想定した機能の半分も実装していない)のですが、それにしてもこんなに複雑怪奇な、どこかひとつ間違えたらバラバラになりそうなコードで良いのだろうかと悩みます。
本当はもっと絶対シンプルに書けるはずだと思うのですが。
似たような制御文とまとめられそうでまとめられない大量のAlertDialog。
なんだかとても正しくない気がします。
何度も書いてますが、ホント疲レタ……
posted by 白虹 at 23:14| Comment(0) | TrackBack(0) | Android開発