私は次のようにプログラムでEdittextを作成しているアプリケーションを開発しています:
_EditText edText = new EditText(this);
edText.setId(1);
edText .setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,0f));
edText .setInputType(InputType.TYPE_CLASS_NUMBER);
edText.setHint("dsgsdgsgs");
tableLayout.addView(edText);
_
ここでは、整数の行edText.setId(1);
によって編集テキストのIDを「1」に設定しています。
しかし、私が必要としているのは、たとえば次のようにIDを文字で設定したいことです。
_edText.setId("edittext_hello");
_
そのIDを介してアクセスできるようにします。どうすればこのタスクを達成できますか?.
Idを文字列として設定することはできません。 Idとして割り当てることができるのは整数のみです。ただし、使いやすさのために文字列をIDとして使用する場合は、-in res/values/ids.xml file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="edit_text_hello" type="id"/>
</resources>
そしてそれを次のように使用します:
edText.setId(R.id.edit_text_hello);
だからあなたはあなたが必要なことをすることができます。
他の人が言っているように、あなたはこれを行うことはできません。なぜあなたはしたいのですか/あなたの要件は何ですか?
Xmlファイルにidを作成し、それを説明的にしたい場合はそれを使用することができます。これは、リテラルint
sを使用するよりも優れたアプローチです。これは、idがレイアウト階層内の他のビューと衝突する可能性があるためです(可能性は低いですが)可能)。これは私にはあなたの問題に対する最良の/最もクリーンな解決策のように思えます。
http://developer.Android.com/guide/topics/resources/more-resources.html#Id を参照してください
例えばres/values/id.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item
type="id"
name="edittext_hello" />
</resources>
そして、
edText.setId(R.id.edittext_hello);
いいえ、id
を文字列として設定することはできません。 Idとして割り当てることができるのはinteger
のみです。 StringでView
のsetTag()
を使用できます。ただし、idの場合は整数のみになります。 As Androidリソースは、整数型のR.Javaファイルで維持されます。
更新:
文字列またはその他のデータ型(整数なし)IDを任意のAndroidリソース?に設定しないのはなぜですか?
なぜなら:
AndroidリソースIDは32ビット整数です。
an 8-bit Package id [bits 24-31]
an 8-bit Type id [bits 16-23]
a 16-bit Entry index [bits 0-15]
パッケージIDは、リソースを含むパッケージチャンクを識別します。
Type idは、リソースのタイプを識別し、したがって、対応するTypespecチャンクとその値を含むTypeチャンクを識別します。
エントリインデックスは、TypespecチャンクとTypeチャンク内の個々のリソースを識別します。
id
をchar
、String
、またはint
...以外のものと一緒に設定することはできません。これは、id
がR.Java
によって維持されているためです。 int
のみを含むファイル。
setTag()
の代わりにsetId()
を使用できます。
以下のようにsetTag()
を使用します。
edText.setTag("edittext_hello");
Ids.xmlのような追加のリソースを作成せずに、また動的に作成されたEditTextのいずれかにidを設定せずに、問題を解決することもできます。
タグを設定した要素の親参照が必要なだけで、タグを使用してそれを見つけることができます。
親
LinearLayout linearLayout= (LinearLayout) findViewById(R.id.layout_id);
その後
子供
EditText editText = (EditText) linearLayout.findViewWithTag("yourStringTag");
例えば..
注:明らかに、EditTextsを動的に作成した場合は、次のようにします。
for (Map.Entry<String, String> entry : yourHashMap.entrySet()) {
LinearLayout linearLayout= (LinearLayout) findViewById(R.id.parent_layout_id);
EditText editText = (EditText) linearLayout.findViewWithTag(entry.getKey());
// Then do whatever you want with your editText referenced.
// ...
}