web-dev-qa-db-ja.com

Android:プログラムでテキストまたはテキストビューIDの編集を設定します

私は次のようにプログラムで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を介してアクセスできるようにします。どうすればこのタスクを達成できますか?.

9
Optim India

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);

だからあなたはあなたが必要なことをすることができます。

18
Manoj Fegde

他の人が言っているように、あなたはこれを行うことはできません。なぜあなたはしたいのですか/あなたの要件は何ですか?

Xmlファイルにidを作成し、それを説明的にしたい場合はそれを使用することができます。これは、リテラルintsを使用するよりも優れたアプローチです。これは、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);
20
Dori

いいえ、idを文字列として設定することはできません。 Idとして割り当てることができるのはintegerのみです。 StringでViewsetTag()を使用できます。ただし、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チャンク内の個々のリソースを識別します。

4
user370305

idcharString、またはint...以外のものと一緒に設定することはできません。これは、idR.Javaによって維持されているためです。 intのみを含むファイル。

setTag()の代わりにsetId()を使用できます。

以下のようにsetTag()を使用します。

edText.setTag("edittext_hello");
3
Hamid Shatu

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.
// ...

}
0
FLBKernel