2011年5月25日水曜日

ラップwrapとは何か

wrapとは、包むという意味である。
保存のために、ビニールで食料品を包む行為を想像すれば良い。
食料品をビニールで包んだ場合、それを触ると、食料品を直接触るのではなく、外側のビニールを触ったことになる。これにより、食料品は傷まない。そして、食料品を持ち運ぶことができる。ボールとして取扱えば、キャッチボールすらできてしまう。そんないろいろなメリットがある。
食べることができないというデメリットはあるが、ここでは考えない。
ラップをすることにより取扱いが容易になり、安全性が向上するのである。
ラップやラッパーという用語があいまいになったら、以上のことを想像すれば良い。

さて、文字列データ群と、その文字列の属性データ群とが、存在するとしよう。
この2個の各々のデータを各々の格納先から持ってくるという手法は、昔から行われてきた手法である。
そうするよりも、文字列データとその属性データとを一個のクラスの中に入れてしまって、メソッドを使い操作すれば、取扱いが容易になる。
クラスに格納するという手間、つまりラッピングするという手間はかかるが、その後の取り扱いは安全で容易になるのである。
この機能を担うクラスをwrapperという。

なお、音楽は、rap musicであって、それをやってる人をrapperという。こっちを想像して踊りだしたりするのは良くない。

2011年5月12日木曜日

No grammar constraints (DTD or XML schema) detected for the document

No grammar constraints (DTD or XML schema) detected for the document

この警告に対する適切な解決方法を見つけましたので報告します。
  1. 上記警告が発生しているXMLファイルを開きます。
  2. Edit>Select All>Copyします。つまり、XMLデータの全てをClipboardに入れます。
  3. カーソルを第一行目の左端に持っていきます。
  4. エンターキーを適当な回数押します。
  5. すると、おかしなことに、警告のマークも下にズレていくことが観察されます。
  6. カーソルを第一行目の左端に持っていきます。
  7. Edit>Pasteします。
  8. このPasteコマンドで張り付けたデータよりも下にあるデータを全て削除します。
  9. すると、何故か警告マークも一緒に消えてしまいます。
  10. そして警告自体も消えます。
以上のことから、この警告はEclipseのバグだろうと思います。

About this warning, many other sites have explained to operate Validation command. But I feel that this method is not appropriate. I think I found a appropriate solution as follow:.
  1. Open the file that issued the warning as such above.
  2. Operate Edit>Select All>Copy. In other words, copy all XML data into the Clipboard.
  3. Move the cursor to the left of the first line.
  4. Press the Enter key a few times.
  5. Then, oddly enough, we observe that the warning mark is going down.
  6. Move the cursor to the left of the first line.
  7. Operate Edit>Paste
  8. Delete all the data that is at lower position than the data that was pasted 
  9. Then, somehow, the warning mark is lost.
  10. And then a warning itself will disappear also.
 In conclusion, I think Eclipse bug caused this warning.

2011年5月6日金曜日

android:idについて

android:idについて

XMLに書かれているandroid:id、例えば、
android:id="@+id/gridview"
に関して

android developersDeclaring Layoutの記事は分かりにくい。そこで、私なりにまとめてみる。

Viewは階層構造をしています。このため、この階層構造は「木、ツリー」(tree)とも表現されたりします。
個々のViewは、個々にIDを持っています。これは個々のViewを識別するためです。
しかし、プログラマは、全てのViewにIDを与えるコードを書く必要はありません。プログラム内で識別を必要とするViewに対してだけ、意図的にIDを付与すれば良いのです。例えば、多くの場合、LinearLayout等のViewGroupにIDを付与する必要性は無いでしょう。

IDはXMLファイル内では通常は文字列として書きます。例えば、次のように。
android:id="@+id/gridview"

このIDは、コンパイルされた場合、整数として参照されます。この整数値の所在は、(コンパイルされた後で)R.javaファイル内に記されています。このファイルの所在は次のとおりです。
/(プロジェクトのルートフォルダー)/gen/(フォルダー)/R.java
実際には、プログラマーは、R.javaを直接操作したり、見たりはしません。無視しておけば良いです。

XMLにおいてIDの表記の仕方は、既に示したように、次のようになります。
android:id="@+id/my_button"
文字列内のデータが@で始まっている場合、その(@で始まる)文字列をリソースのIDとして解釈します。

+記号がある場合、それは、R.javaファイルに、当該データを「作成する」ことを指示します。

既に作成されてあるデータを参照する場合には、次のように、+記号を付けずに書きます。
android:id="@id/my_button"

例えば、次のような書き方もあります。
android:id="@android:id/empty"
これは、"android"というパッケージネームスペースを使って、android.RリソースクラスからIDを参照します。これはローカルにある、resフォルダーのリソースを参照するものではありません。