Je développe une application dans laquelle je crée un Edittext par programme comme:
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);
Ici, je mets l'identifiant du texte d'édition à "1" par la ligne edText.setId(1);
en entier.
Mais ce dont j'ai besoin, c’est - je veux définir l’ID en caractère, comme par exemple:
edText.setId("edittext_hello");
Pour que je puisse y accéder via cet identifiant. Comment puis-je accomplir cette tâche s'il vous plaît aider.
Vous ne pouvez pas définir l'identifiant en tant que chaîne. Vous pouvez uniquement attribuer un entier à Id. Mais si vous voulez utiliser String comme id pour la facilité d’utilisation, alors dans res/values / ids.xml file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="edit_text_hello" type="id"/>
</resources>
Et puis utilisez-le comme:
edText.setId(R.id.edit_text_hello);
Vous pouvez donc faire ce dont vous avez besoin.
Comme les autres l'ont dit, vous ne pouvez pas faire cela. Pourquoi voulez-vous/quelle est votre exigence?
Vous pouvez créer un id dans un fichier XML et l'utiliser - si vous voulez que ce soit descriptif. C'est également une meilleure approche que d'utiliser des int
s littéraux, car vous risquez d'obtenir une collision id avec d'autres vues de la hiérarchie de la disposition (peu probable mais possible). Cela me semble être la meilleure solution/la plus propre à votre problème.
Voir http://developer.Android.com/guide/topics/resources/more-resources.html#Id
par exemple. dans res/values/id.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item
type="id"
name="edittext_hello" />
</resources>
puis mis avec
edText.setId(R.id.edittext_hello);
Non, vous ne pouvez pas définir id
en tant que chaîne. Vous ne pouvez affecter que integer
en tant qu'id. Vous pouvez utiliser setTag()
of View
avec String. Mais pour id ce ne sera que Integer. Comme les ressources Android sont gérées dans un fichier R.Java pour le type entier.
Mettre à jour:
Pourquoi ne définissez-vous pas String ou d'autres types de données (sans entier) id sur une ressource Android?
Parce que:
Un identifiant de ressource Android est un entier de 32 bits. Il comporte
an 8-bit Package id [bits 24-31]
an 8-bit Type id [bits 16-23]
a 16-bit Entry index [bits 0-15]
Le ID du package identifie le bloc Package qui contient la ressource.
Le Type id identifie le type de la ressource et, par conséquent, le fragment Typespec et le ou les fragments Type qui contiennent sa valeur ou ses valeurs.
Le index d'entrée identifie la ressource individuelle dans le bloc Typespec et le ou les blocs Type.
Vous ne pouvez pas définir id
avec char
, String
ou quoi que ce soit d'autre que int
... car id
est maintenu par le fichier R.Java
qui ne contient que int
.
Vous pouvez utiliser setTag()
au lieu de setId()
.
Utilisez setTag()
comme ci-dessous ...
edText.setTag("edittext_hello");
Vous pouvez également résoudre votre problème sans créer aucune ressource supplémentaire telle que ids.xml et sans définir aucun identifiant sur aucun des EditText créés dynamiquement.
Il suffit d’avoir la référence parent de l’élément pour lequel vous avez défini une balise, puis vous pouvez la trouver avec la balise.
Parent
LinearLayout linearLayout= (LinearLayout) findViewById(R.id.layout_id);
et alors
Enfants
EditText editText = (EditText) linearLayout.findViewWithTag("yourStringTag");
par exemple..
Remarque: Évidemment, si vous avez créé EditTexts de manière dynamique, vous feriez quelque chose comme ceci:
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.
// ...
}