Android – フィールドの動的な追加_2

投稿者: | 2018年12月16日

前回の記事では、動的なレイアウトフィールドを追加するのに、簡単にするために固定のテキストフィールドを一つだけ追加していきました。

また追加の対象となるアイテムは、そのレイアウトを記載したXMLファイルに記述しておくのでした。そうすることで、街頭するXMLファイルの内容を変更するだけで、追加するレイアウトフィールドを複雑にすることもできるようになります。

しかしフィールドを動的に追加したときに考慮する必要があるのが、IDの問題です。

レイアウトXMLにはIDを固定でしか指定できません。しかし動的に追加したフィールドから値を個別に取得し、データベースに格納したいというケースもあり得ます。

各々のフィールドから値を取得するには、通常そのフィールドのIDを使用しますので、IDについても動的に割り振っておく必要があります。

IDの分離を考慮せずにフィールドを追加するとどうなるでしょうか。前回使用したsub.xmlの内容に、EditTextを追加して検証してみます。

前回のsub.xmlをこのように変更します。TextViewとEditTextを含み、EditTextのIDをet_Subとしています。

 

“追加”ボタンを押下してEditTextに値を書き込み、また”追加”ボタンを押す、という動作を3回繰り返しました。画面はこのようになります。

 

画面上はそれぞれ異なる値を入力したのですが、Logcatに表示されている値は次のように同じものしか表示されません。
IDのコントロールなしには適切に値を取得することはできないのです。

 

これを解決するため、画面上のEditTextにIDを付与します。このためにはsetIdメソッドを使用します。但しsetIdメソッドの引数はint型のみです。付与するIDはint型でコントロールする必要があります。
一例として、OnClickメソッドにてIDを連番で付与してみます。

 

この処理を追加した後、先ほどと同様に、”追加”ボタンを押下してEditTextに値を書き込み、また”追加”ボタンを押す、という動作を3回繰り返すと・・・

 

今度は各フィールドが取得できました。動的に付与したIDを使用することで、各々の値が正しく取れていることが分かります。